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-all
mailing list