svn commit: r261354 - head/lib/libthr/thread

Konstantin Belousov kib at FreeBSD.org
Sat Feb 1 18:13:18 UTC 2014


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 at 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);


More information about the svn-src-head mailing list