Browse Source

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.
Rich Felker 12 năm trước cách đây
mục cha
commit
73db33b949
1 tập tin đã thay đổi với 1 bổ sung3 xóa
  1. 1 3
      src/thread/cancel_impl.c

+ 1 - 3
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()