1*c9945492SAndroid Build Coastguard Worker #include "pthread_impl.h" 2*c9945492SAndroid Build Coastguard Worker #include "lock.h" 3*c9945492SAndroid Build Coastguard Worker pthread_kill(pthread_t t,int sig)4*c9945492SAndroid Build Coastguard Workerint pthread_kill(pthread_t t, int sig) 5*c9945492SAndroid Build Coastguard Worker { 6*c9945492SAndroid Build Coastguard Worker int r; 7*c9945492SAndroid Build Coastguard Worker sigset_t set; 8*c9945492SAndroid Build Coastguard Worker /* Block not just app signals, but internal ones too, since 9*c9945492SAndroid Build Coastguard Worker * pthread_kill is used to implement pthread_cancel, which 10*c9945492SAndroid Build Coastguard Worker * must be async-cancel-safe. */ 11*c9945492SAndroid Build Coastguard Worker __block_all_sigs(&set); 12*c9945492SAndroid Build Coastguard Worker LOCK(t->killlock); 13*c9945492SAndroid Build Coastguard Worker r = t->tid ? -__syscall(SYS_tkill, t->tid, sig) 14*c9945492SAndroid Build Coastguard Worker : (sig+0U >= _NSIG ? EINVAL : 0); 15*c9945492SAndroid Build Coastguard Worker UNLOCK(t->killlock); 16*c9945492SAndroid Build Coastguard Worker __restore_sigs(&set); 17*c9945492SAndroid Build Coastguard Worker return r; 18*c9945492SAndroid Build Coastguard Worker } 19