diff options
author | Christopher Faylor <me@cgf.cx> | 2008-02-13 17:21:05 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2008-02-13 17:21:05 +0000 |
commit | b40597cb2e915d2703b258a04a45292f2d1ed4ed (patch) | |
tree | 8a2ba5405cc2d678c9cfeec43fc44249da551130 /winsup/cygwin/thread.cc | |
parent | a9414ca6d8cd5c3adc84ae1a522f0e2c8eb3bcae (diff) | |
download | cygnal-b40597cb2e915d2703b258a04a45292f2d1ed4ed.tar.gz cygnal-b40597cb2e915d2703b258a04a45292f2d1ed4ed.tar.bz2 cygnal-b40597cb2e915d2703b258a04a45292f2d1ed4ed.zip |
* syscalls.cc (_isatty): Define as an alias to isatty to override newlib
version.
* thread.cc (pthread_kill): Deal with signal 0 as per POSIX and also avoid
manipulating an invalid thread.
Diffstat (limited to 'winsup/cygwin/thread.cc')
-rw-r--r-- | winsup/cygwin/thread.cc | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index d78bbbb9c..7e52e3be9 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -2640,8 +2640,24 @@ pthread_kill (pthread_t thread, int sig) si.si_code = SI_USER; si.si_pid = myself->pid; si.si_uid = myself->uid; - thread->cygtls->set_threadkill (); - int rval = sig ? sig_send (NULL, si, thread->cygtls) : 0; + int rval; + if (!thread->valid) + rval = ESRCH; + else if (sig) + { + thread->cygtls->set_threadkill (); + rval = sig_send (NULL, si, thread->cygtls); + } + else + switch (WaitForSingleObject (thread->win32_obj_id, 0)) + { + case WAIT_TIMEOUT: + rval = 0; + break; + default: + rval = ESRCH; + break; + } // unlock myself return rval; |