#include "pthread_impl.h" | |
#include "lock.h" | |
int pthread_kill(pthread_t t, int sig) | |
{ | |
int r; | |
sigset_t set; | |
/* Block not just app signals, but internal ones too, since | |
* pthread_kill is used to implement pthread_cancel, which | |
* must be async-cancel-safe. */ | |
__block_all_sigs(&set); | |
LOCK(t->killlock); | |
r = t->tid ? -__syscall(SYS_tkill, t->tid, sig) | |
: (sig+0U >= _NSIG ? EINVAL : 0); | |
UNLOCK(t->killlock); | |
__restore_sigs(&set); | |
return r; | |
} |