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