diff options
author | Robin Gareus <robin@gareus.org> | 2019-07-25 21:24:36 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-07-25 21:24:36 +0200 |
commit | d7454714ab4c75092a500a899dcd6d8009599cd9 (patch) | |
tree | fd4d8afd40babe7aaa7d08606e4d92f9cfec9565 /libs/backends | |
parent | 77fbe22e55fac8d7e280c9d68744a4f6cbbf21e6 (diff) |
Fix PA: unlock mainloop on abort
Diffstat (limited to 'libs/backends')
-rw-r--r-- | libs/backends/pulseaudio/pulseaudio_backend.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libs/backends/pulseaudio/pulseaudio_backend.cc b/libs/backends/pulseaudio/pulseaudio_backend.cc index 0c3d6c8a01..feb51e8290 100644 --- a/libs/backends/pulseaudio/pulseaudio_backend.cc +++ b/libs/backends/pulseaudio/pulseaudio_backend.cc @@ -1376,8 +1376,7 @@ PulseAudioBackend::main_process_thread () /* drain stream freewheeling */ pa_threaded_mainloop_lock (p_mainloop); _operation_succeeded = false; - sync_pulse (pa_stream_drain (p_stream, stream_operation_cb, this)); - if (!_operation_succeeded) { + if (!sync_pulse (pa_stream_drain (p_stream, stream_operation_cb, this)) || !_operation_succeeded) { break; } @@ -1388,8 +1387,7 @@ PulseAudioBackend::main_process_thread () if (!_freewheel) { pa_threaded_mainloop_lock (p_mainloop); _operation_succeeded = false; - sync_pulse (pa_stream_flush (p_stream, stream_operation_cb, this)); - if (!_operation_succeeded) { + if (!sync_pulse (pa_stream_flush (p_stream, stream_operation_cb, this)) || !_operation_succeeded) { break; } } @@ -1405,6 +1403,7 @@ PulseAudioBackend::main_process_thread () } if (pa_stream_get_state (p_stream) != PA_STREAM_READY) { + pa_threaded_mainloop_unlock (p_mainloop); break; } @@ -1412,6 +1411,7 @@ PulseAudioBackend::main_process_thread () /* call engine process callback */ _last_process_start = g_get_monotonic_time (); if (engine.process_callback (_samples_per_period)) { + pa_threaded_mainloop_unlock (p_mainloop); _active = false; return 0; } @@ -1430,6 +1430,7 @@ PulseAudioBackend::main_process_thread () } if (pa_stream_write (p_stream, buf, bytes_to_write, NULL, 0, PA_SEEK_RELATIVE) < 0) { + pa_threaded_mainloop_unlock (p_mainloop); break; } pa_threaded_mainloop_unlock (p_mainloop); |