diff options
| author | John Birrell <jb@FreeBSD.org> | 1998-04-29 09:59:34 +0000 |
|---|---|---|
| committer | John Birrell <jb@FreeBSD.org> | 1998-04-29 09:59:34 +0000 |
| commit | 4a027d50c7f3f30178a89b3159ba9e4b44f06885 (patch) | |
| tree | b7a4ea836e97e11d436f9a6657ea6a9ec8036c33 /lib/libpthread/thread/thr_kill.c | |
| parent | ccf47cfcedf9f3db1780bc3b52ca0adb4480d3f6 (diff) | |
Notes
Diffstat (limited to 'lib/libpthread/thread/thr_kill.c')
| -rw-r--r-- | lib/libpthread/thread/thr_kill.c | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/lib/libpthread/thread/thr_kill.c b/lib/libpthread/thread/thr_kill.c index eb2c6b75d740..f6e684b0d4b5 100644 --- a/lib/libpthread/thread/thr_kill.c +++ b/lib/libpthread/thread/thr_kill.c @@ -39,40 +39,19 @@ int pthread_kill(pthread_t pthread, int sig) { - int rval = 0; - int status; - pthread_t p_pthread; + int ret; /* Check for invalid signal numbers: */ if (sig < 0 || sig >= NSIG) /* Invalid signal: */ - rval = EINVAL; - else { - /* Assume that the search will succeed: */ - rval = 0; + ret = EINVAL; - /* Block signals: */ - _thread_kern_sig_block(&status); - - /* Search for the thread: */ - p_pthread = _thread_link_list; - while (p_pthread != NULL && p_pthread != pthread) { - p_pthread = p_pthread->nxt; - } - - /* Check if the thread was not found: */ - if (p_pthread == NULL) - /* Can't find the thread: */ - rval = ESRCH; - else - /* Increment the pending signal count: */ - p_pthread->sigpend[sig] += 1; - - /* Unblock signals: */ - _thread_kern_sig_unblock(status); - } + /* Find the thread in the list of active threads: */ + else if ((ret = _find_thread(pthread)) == 0) + /* Increment the pending signal count: */ + sigaddset(&pthread->sigpend,sig); /* Return the completion status: */ - return (rval); + return (ret); } #endif |
