summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-02-01 18:13:18 +0000
committerkib <kib@FreeBSD.org>2014-02-01 18:13:18 +0000
commit0dc5095a6ab491023c0f514398aaad46fa099040 (patch)
tree44d08f27b7b3769037fb4922cb692651c6b463ae /lib
parentaed0493328ff1618f12aa81472afd43cd1413294 (diff)
downloadFreeBSD-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')
-rw-r--r--lib/libthr/thread/thr_kill.c13
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);
OpenPOWER on IntegriCloud