diff --git a/audio/audio_thread_wrapper.c b/audio/audio_thread_wrapper.c index 55bb2886f9..f1f307c399 100644 --- a/audio/audio_thread_wrapper.c +++ b/audio/audio_thread_wrapper.c @@ -81,8 +81,8 @@ static void audio_thread_loop(void *data) if (!thr->alive) { scond_signal(thr->cond); - slock_unlock(thr->lock); thr->stopped_ack = true; + slock_unlock(thr->lock); break; } diff --git a/audio/drivers/alsathread.c b/audio/drivers/alsathread.c index f8a2c53e9f..cb9676b4bb 100644 --- a/audio/drivers/alsathread.c +++ b/audio/drivers/alsathread.c @@ -132,7 +132,9 @@ static void alsa_thread_free(void *data) { if (alsa->worker_thread) { + slock_lock(alsa->cond_lock); alsa->thread_dead = true; + slock_unlock(alsa->cond_lock); sthread_join(alsa->worker_thread); } if (alsa->buffer)