threads/186309: pthread_kill() broken code - signal to current thread sent twice

John Wolfe jlw at xinuos.com
Fri Jan 31 21:10:00 UTC 2014


>Number:         186309
>Category:       threads
>Synopsis:       pthread_kill() broken code - signal to current thread sent twice
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-threads
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jan 31 21:10:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator:     John Wolfe
>Release:        FreeBSD (PC-BSD) 9.2 & FreeBSD 10.0 RELEASE
>Organization:
Xinuos, Inc.
>Environment:
FreeBSD sapphire.nj.sco.com 9.2-RELEASE-p12 FreeBSD 9.2-RELEASE-p12 #0: Thu Jan 16 21:12:30 UTC 2014     root at amd64-builder.pcbsd.org:/usr/obj/usr/src/sys/GENERIC  amd64

>Description:
Regression tests for llvm/LLDB debugger on FreeBSD 9 and FreeBSD 10 fail those tests that expect a specific number of SIGUSR1 signals to be caught by the debugger.   See FreeBSD lldb problem report:

   http://llvm.org/bugs/show_bug.cgi?id=18065

Exactly twice the expected signals are caught.  This is because the "if - else if -else if" code in lib/libthr/thread/thr_kill.c  pthread_kill () is missing the
obviously intended "else" before the last "if" statement.


>How-To-Repeat:
See above mentioned LLDB problem report.
>Fix:
A proposed unified diff patch is attached.

Patch attached with submission follows:

--- /usr/src/lib/libthr/thread/thr_kill.c.orig	2013-11-07 17:27:57.642970341 -0500
+++ /usr/src/lib/libthr/thread/thr_kill.c	2014-01-31 15:17:29.345215938 -0500
@@ -58,7 +58,8 @@
 		if (sig > 0)
 			_thr_send_sig(pthread, sig);
 		ret = 0;
-	} if ((ret = _thr_find_thread(curthread, pthread, /*include dead*/0))
+	}
+	else if ((ret = _thr_find_thread(curthread, pthread, /*include dead*/0))
 	    == 0) {
 		if (sig > 0)
 			_thr_send_sig(pthread, sig);


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-threads mailing list