mirror of
https://github.com/fluencelabs/musl
synced 2025-06-15 16:01:41 +00:00
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.
This commit is contained in:
@ -3,7 +3,6 @@
|
|||||||
void __cancel()
|
void __cancel()
|
||||||
{
|
{
|
||||||
pthread_t self = __pthread_self();
|
pthread_t self = __pthread_self();
|
||||||
self->cp_sp = 0;
|
|
||||||
self->canceldisable = 1;
|
self->canceldisable = 1;
|
||||||
self->cancelasync = 0;
|
self->cancelasync = 0;
|
||||||
pthread_exit(PTHREAD_CANCELED);
|
pthread_exit(PTHREAD_CANCELED);
|
||||||
@ -48,8 +47,7 @@ static void cancel_handler(int sig, siginfo_t *si, void *ctx)
|
|||||||
__cancel();
|
__cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->cp_sp)
|
__syscall(SYS_tgkill, self->pid, self->tid, SIGCANCEL);
|
||||||
__syscall(SYS_tgkill, self->pid, self->tid, SIGCANCEL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __testcancel()
|
void __testcancel()
|
||||||
|
Reference in New Issue
Block a user