Ticket #430: pulseaudio-threaded-mainloop-signals-trunk.patch

File pulseaudio-threaded-mainloop-signals-trunk.patch, 2.3 KB (added by jcornwall, 3 years ago)

Patch to conditionally call pthread_sigmask only once pa_signal_init has been called

  • src/pulse/internal.h

    diff --git a/src/pulse/internal.h b/src/pulse/internal.h
    index 5fe4210..c484175 100644
    a b  
    221221int pa_context_handle_error(pa_context *c, uint32_t command, pa_tagstruct *t, pa_bool_t fail); 
    222222pa_operation* pa_context_send_simple_command(pa_context *c, uint32_t command, void (*internal_callback)(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata), void (*cb)(void), void *userdata); 
    223223 
     224int pa_signal_initialized(pa_mainloop_api *a); 
     225 
    224226void pa_stream_set_state(pa_stream *s, pa_stream_state_t st); 
    225227 
    226228pa_tagstruct *pa_tagstruct_command(pa_context *c, uint32_t command, uint32_t *tag); 
  • src/pulse/mainloop-signal.c

    diff --git a/src/pulse/mainloop-signal.c b/src/pulse/mainloop-signal.c
    index d09f4b0..b103056 100644
    a b  
    4545#include <pulsecore/log.h> 
    4646#include <pulsecore/macro.h> 
    4747 
     48#include "internal.h" 
    4849#include "mainloop-signal.h" 
    4950 
    5051struct pa_signal_event { 
     
    141142    return 0; 
    142143} 
    143144 
     145int pa_signal_initialized(pa_mainloop_api *a) { 
     146    return api && api == a; 
     147} 
     148 
    144149void pa_signal_done(void) { 
    145150    while (signals) 
    146151        pa_signal_free(signals); 
  • src/pulse/thread-mainloop.c

    diff --git a/src/pulse/thread-mainloop.c b/src/pulse/thread-mainloop.c
    index fb73ff1..58517ed 100644
    a b  
    4343#include <pulsecore/mutex.h> 
    4444#include <pulsecore/macro.h> 
    4545 
     46#include "internal.h" 
    4647#include "thread-mainloop.h" 
    4748 
    4849struct pa_threaded_mainloop { 
     
    7778static void thread(void *userdata) { 
    7879    pa_threaded_mainloop *m = userdata; 
    7980 
     81 
    8082#ifndef OS_IS_WIN32 
    81     sigset_t mask; 
     83    if (pa_signal_initialized(pa_threaded_mainloop_get_api(m))) { 
     84        sigset_t mask; 
    8285 
    83     /* Make sure that signals are delivered to the main thread */ 
    84     sigfillset(&mask); 
    85     pthread_sigmask(SIG_BLOCK, &mask, NULL); 
     86        /* Make sure that signals are delivered to the main thread */ 
     87        sigfillset(&mask); 
     88        pthread_sigmask(SIG_BLOCK, &mask, NULL); 
     89    } 
    8690#endif 
    8791 
    8892    pa_mutex_lock(m->mutex);