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:
parent
bd5b7a6f71
commit
bc16c73407
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue