pulse: fix crash when cleaning up signals

Also make sure the main pulseaudio binary can't be started.
This commit is contained in:
Wim Taymans 2020-08-21 15:36:03 +02:00
parent f3c06372ef
commit 4370675d2b
3 changed files with 12 additions and 8 deletions

View file

@ -31,6 +31,7 @@
static pa_mainloop_api *api = NULL;
static bool have_signals = false;
static struct spa_list signals;
static struct pw_loop *loop = NULL;
@ -58,14 +59,12 @@ int pa_signal_init(pa_mainloop_api *a)
SPA_EXPORT
void pa_signal_done(void)
{
pa_signal_event *ev, *t;
pa_signal_event *ev;
pa_assert(api);
spa_list_for_each_safe(ev, t, &signals, link)
if (have_signals) {
spa_list_consume(ev, &signals, link)
pa_signal_free(ev);
spa_list_init(&signals);
}
api = NULL;
}
@ -89,6 +88,9 @@ pa_signal_event* pa_signal_new(int sig, pa_signal_cb_t callback, void *userdata)
ev->callback = callback;
ev->userdata = userdata;
if (!have_signals)
spa_list_init(&signals);
have_signals = true;
spa_list_append(&signals, &ev->link);
return ev;

View file

@ -254,6 +254,9 @@ pa_mainloop *pa_mainloop_new(void)
{
pa_mainloop *loop;
if (getenv("PULSE_INTERNAL"))
return NULL;
loop = calloc(1, sizeof(pa_mainloop));
if (loop == NULL)
return NULL;

View file

@ -32,4 +32,3 @@ bool pa_is_pipewire(void)
{
return true;
}