2004-11-17 Roland McGrath <roland@redhat.com>
authorRoland McGrath <roland@gnu.org>
Wed, 17 Nov 2004 21:26:59 +0000 (21:26 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 17 Nov 2004 21:26:59 +0000 (21:26 +0000)
* sysdeps/unix/sysv/linux/timer_routines.c (__start_helper_thread):
Make sure SIGCANCEL is blocked as well.

nptl/sysdeps/unix/sysv/linux/timer_routines.c

index ae5f1f7..23c800f 100644 (file)
@@ -122,10 +122,13 @@ __start_helper_thread (void)
   (void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
 
   /* Block all signals in the helper thread.  To do this thoroughly we
-     temporarily have to block all signals here.  */
+     temporarily have to block all signals here.  The helper can lose
+     wakeups if SIGCANCEL is not blocked throughout, but sigfillset omits
+     it.  So, we add it back explicitly here.  */
   sigset_t ss;
   sigset_t oss;
   sigfillset (&ss);
+  __sigaddset (&ss, SIGCANCEL);
   INTERNAL_SYSCALL_DECL (err);
   INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, &oss, _NSIG / 8);