xref: /aosp_15_r20/external/musl/src/thread/pthread_kill.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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 Worker int 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