gallium: block signals for new thread when spawning threads

I'm hard pressed to think of any reason a gallium thread would want to
receive a signal, especially considering its probably loaded as a library
and you don't want the threads interfering with the main threads signal
handling.

This solves a problem loading llvmpipe into the X server for AIGLX,
where the X server relies on the SIGIO signal going to the main thread,
but once llvmpipe loads the SIGIO can end up in any of its threads.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2011-05-15 16:41:54 +10:00
parent bd5b7a6f71
commit bc16c73407
1 changed files with 8 additions and 1 deletions

View File

@ -56,7 +56,14 @@ typedef pthread_t pipe_thread;
static INLINE pipe_thread pipe_thread_create( void *(* routine)( void *), void *param )
{
pipe_thread thread;
if (pthread_create( &thread, NULL, routine, param ))
sigset_t saved_set, new_set;
int ret;
sigfillset(&new_set);
pthread_sigmask(SIG_SETMASK, &new_set, &saved_set);
ret = pthread_create( &thread, NULL, routine, param );
pthread_sigmask(SIG_SETMASK, &saved_set, NULL);
if (ret)
return 0;
return thread;
}