diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-05-25 00:35:09 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-05-25 00:35:09 -0400 | 
| commit | 73db33b94927d160f5dac5861a37ffbfd81d3ff6 (patch) | |
| tree | 6fa8e332d5a14fd377965932f583f8c9a9a7932b /src | |
| parent | 54c567649eaadb99175b3883659872f791e482b1 (diff) | |
| download | musl-73db33b94927d160f5dac5861a37ffbfd81d3ff6.tar.gz | |
remove leftover cp_sp cruft from cancellation code, fix small bug
the bug was that cancellation requests which arrived while a
cancellation point was interrupted by a signal handler would not be
acted upon when the signal handler returns. this was because cp_sp was
never set; it's no longer needed or used.
instead, just always re-raise the signal when cancellation was not
acted upon. this wastes a tiny amount of time in the rare case where
it even matters, but it ensures correctness and simplifies the code.
Diffstat (limited to 'src')
| -rw-r--r-- | src/thread/cancel_impl.c | 4 | 
1 files changed, 1 insertions, 3 deletions
| diff --git a/src/thread/cancel_impl.c b/src/thread/cancel_impl.c index 3bf1e392..a1648982 100644 --- a/src/thread/cancel_impl.c +++ b/src/thread/cancel_impl.c @@ -3,7 +3,6 @@  void __cancel()  {  	pthread_t self = __pthread_self(); -	self->cp_sp = 0;  	self->canceldisable = 1;  	self->cancelasync = 0;  	pthread_exit(PTHREAD_CANCELED); @@ -48,8 +47,7 @@ static void cancel_handler(int sig, siginfo_t *si, void *ctx)  		__cancel();  	} -	if (self->cp_sp) -		__syscall(SYS_tgkill, self->pid, self->tid, SIGCANCEL); +	__syscall(SYS_tgkill, self->pid, self->tid, SIGCANCEL);  }  void __testcancel() | 
