From 75d8fd7624fd01549cc2bb774ec1ce136b7791c9 Mon Sep 17 00:00:00 2001 From: "Igor V. Kovalenko" Date: Sat, 16 Jan 2021 09:17:25 +0300 Subject: [PATCH] log: fix race checking for thread exit request --- src/pulsecore/log.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c index 6e2c07a08..b1a51ca84 100644 --- a/src/pulsecore/log.c +++ b/src/pulsecore/log.c @@ -185,9 +185,6 @@ static void log_thread_func(void *userdata) { for (;;) { - if (log_thread_do_exit) - goto finish; - struct log_item *l; if ((l = pa_asyncq_pop(async_queue, false))) { @@ -195,12 +192,19 @@ static void log_thread_func(void *userdata) { if (pa_flist_push(PA_STATIC_FLIST_GET(log_items), l) < 0) { pa_xfree(l); } - } else { - /* wait */ - pa_mutex_lock(log_mutex); - pa_cond_wait(log_cond, log_mutex); - pa_mutex_unlock(log_mutex); + if (!log_thread_do_exit) + continue; } + + /* if thread exit is not requested, wait for more items */ + + pa_mutex_lock(log_mutex); + if (!log_thread_do_exit) + pa_cond_wait(log_cond, log_mutex); + pa_mutex_unlock(log_mutex); + + if (log_thread_do_exit) + break; } finish: