diff options
author | kib <kib@FreeBSD.org> | 2014-02-01 18:13:18 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-02-01 18:13:18 +0000 |
commit | 0dc5095a6ab491023c0f514398aaad46fa099040 (patch) | |
tree | 44d08f27b7b3769037fb4922cb692651c6b463ae /lib/libthr | |
parent | aed0493328ff1618f12aa81472afd43cd1413294 (diff) | |
download | FreeBSD-src-0dc5095a6ab491023c0f514398aaad46fa099040.zip FreeBSD-src-0dc5095a6ab491023c0f514398aaad46fa099040.tar.gz |
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
Diffstat (limited to 'lib/libthr')
-rw-r--r-- | lib/libthr/thread/thr_kill.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/libthr/thread/thr_kill.c b/lib/libthr/thread/thr_kill.c index b54458c58..8b0f683 100644 --- a/lib/libthr/thread/thr_kill.c +++ b/lib/libthr/thread/thr_kill.c @@ -42,24 +42,27 @@ __weak_reference(_pthread_kill, pthread_kill); 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); |