diff options
| -rw-r--r-- | libpthread/linuxthreads/join.c | 4 | ||||
| -rw-r--r-- | libpthread/linuxthreads/pthread.c | 5 | 
2 files changed, 8 insertions, 1 deletions
| diff --git a/libpthread/linuxthreads/join.c b/libpthread/linuxthreads/join.c index cc2dc4ddc..bce737dea 100644 --- a/libpthread/linuxthreads/join.c +++ b/libpthread/linuxthreads/join.c @@ -52,10 +52,11 @@ PDEBUG("self=%p, pid=%d\n", self, self->p_pid);        uint32_t mask = __td_eventmask (TD_DEATH);        if ((mask & (__pthread_threads_events.event_bits[idx] -		   | THREAD_GETMEM(self, +		   | THREAD_GETMEM_NC(self,  				   p_eventbuf.eventmask).event_bits[idx]))  	  != 0)  	{ +#if 0 /* Appears like DEATH event reporting is broken */  	  /* Yep, we have to signal the death.  */  	  THREAD_SETMEM(self, p_eventbuf.eventnum, TD_DEATH);  	  THREAD_SETMEM(self, p_eventbuf.eventdata, self); @@ -63,6 +64,7 @@ PDEBUG("self=%p, pid=%d\n", self, self->p_pid);  	  /* Now call the function to signal the event.  */  	  __linuxthreads_death_event(); +#endif  	}      }    /* See if someone is joining on us */ diff --git a/libpthread/linuxthreads/pthread.c b/libpthread/linuxthreads/pthread.c index c4225bce8..2615fe724 100644 --- a/libpthread/linuxthreads/pthread.c +++ b/libpthread/linuxthreads/pthread.c @@ -376,6 +376,7 @@ static void pthread_initialize(void)    sa.sa_flags = 0;    __libc_sigaction(__pthread_sig_restart, &sa, NULL);    sa.sa_handler = pthread_handle_sigcancel; +  sigaddset(&sa.sa_mask, __pthread_sig_restart);    // sa.sa_flags = 0;    __libc_sigaction(__pthread_sig_cancel, &sa, NULL);    if (__pthread_sig_debug > 0) { @@ -388,6 +389,10 @@ static void pthread_initialize(void)    sigemptyset(&mask);    sigaddset(&mask, __pthread_sig_restart);    sigprocmask(SIG_BLOCK, &mask, NULL); +  /* And unblock __pthread_sig_cancel if it has been blocked. */ +  sigdelset(&mask, __pthread_sig_restart); +  sigaddset(&mask, __pthread_sig_cancel); +  sigprocmask(SIG_UNBLOCK, &mask, NULL);    /* Register an exit function to kill all other threads. */    /* Do it early so that user-registered atexit functions are called       before pthread_onexit_process. */ | 
