Explorar el Código

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 hace 12 años
padre
commit
73db33b949
Se han modificado 1 ficheros con 1 adiciones y 3 borrados
  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()