Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Feb 2014 18:13:18 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r261354 - head/lib/libthr/thread
Message-ID:  <201402011813.s11IDIl7000627@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Sat Feb  1 18:13:18 2014
New Revision: 261354
URL: http://svnweb.freebsd.org/changeset/base/261354

Log:
  In _pthread_kill(), if passed pthread is current thread, do not send
  the signal second time, by adding the missed else before if statement.
  
  While there, postpone initializing local curthread variable until
  passed signal number is checked for validity.
  
  Submitted by:	John Wolfe <jlw@xinuos.com>
  PR:	threads/186309
  MFC after:	1 week

Modified:
  head/lib/libthr/thread/thr_kill.c

Modified: head/lib/libthr/thread/thr_kill.c
==============================================================================
--- head/lib/libthr/thread/thr_kill.c	Sat Feb  1 17:53:35 2014	(r261353)
+++ head/lib/libthr/thread/thr_kill.c	Sat Feb  1 18:13:18 2014	(r261354)
@@ -42,24 +42,27 @@ __weak_reference(_pthread_kill, pthread_
 int
 _pthread_kill(pthread_t pthread, int sig)
 {
-	struct pthread *curthread = _get_curthread();
+	struct pthread *curthread;
 	int ret;
 
 	/* Check for invalid signal numbers: */
 	if (sig < 0 || sig > _SIG_MAXSIG)
 		/* Invalid signal: */
-		ret = EINVAL;
+		return (EINVAL);
+
+	curthread = _get_curthread();
+
 	/*
 	 * Ensure the thread is in the list of active threads, and the
 	 * signal is valid (signal 0 specifies error checking only) and
 	 * not being ignored:
 	 */
-	else if (curthread == pthread) {
+	if (curthread == pthread) {
 		if (sig > 0)
 			_thr_send_sig(pthread, sig);
 		ret = 0;
-	} if ((ret = _thr_find_thread(curthread, pthread, /*include dead*/0))
-	    == 0) {
+	} else if ((ret = _thr_find_thread(curthread, pthread,
+	    /*include dead*/0)) == 0) {
 		if (sig > 0)
 			_thr_send_sig(pthread, sig);
 		THR_THREAD_UNLOCK(curthread, pthread);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402011813.s11IDIl7000627>