diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc index 01b49468e..1be7f0c32 100644 --- a/winsup/cygwin/cygheap.cc +++ b/winsup/cygwin/cygheap.cc @@ -737,6 +737,24 @@ init_cygheap::find_tls (int sig, bool& issig_wait) return t; } +sigset_t +init_cygheap::compute_sigblkmask () +{ + sigset_t ret_mask = -1; + + tls_sentry here (INFINITE); + + int ix = -1; + /* Scan thread list looking for valid signal-receiving threads */ + while (++ix < (int) nthreads) + { + /* Only pthreads have tid set to non-0. */ + if (threadlist[ix].thread->tid && threadlist[ix].thread->initialized) + ret_mask &= threadlist[ix].thread->sigmask; + } + return ret_mask; +} + /* Called from profil.c to sample all non-main thread PC values for profiling */ extern "C" void cygheap_profthr_all (void (*profthr_byhandle) (HANDLE)) diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h index 252dd414d..a47d9819e 100644 --- a/winsup/cygwin/cygheap.h +++ b/winsup/cygwin/cygheap.h @@ -590,6 +590,7 @@ struct init_cygheap: public mini_cygheap HANDLE __reg3 remove_tls (_cygtls *); threadlist_t __reg2 *find_tls (_cygtls *); threadlist_t __reg3 *find_tls (int, bool&); + sigset_t compute_sigblkmask (); void unlock_tls (threadlist_t *t) { if (t) ReleaseMutex (t->mutex); } };