output/pipewire: call libpipewire only while holding the lock

Closes https://github.com/MusicPlayerDaemon/MPD/issues/1210
This commit is contained in:
Max Kellermann
2021-07-30 13:43:53 +02:00
parent 6975d3ca4b
commit 97e5787ff7
2 changed files with 62 additions and 2 deletions

View File

@@ -18,7 +18,7 @@
*/
#include "PipeWireOutputPlugin.hxx"
//#include "lib/pipewire/MainLoop.hxx"
#include "lib/pipewire/ThreadLoop.hxx"
#include "../OutputAPI.hxx"
#include "../Error.hxx"
@@ -212,6 +212,7 @@ PipeWireOutput::Open(AudioFormat &audio_format)
params[0] = spa_format_audio_raw_build(&pod_builder,
SPA_PARAM_EnumFormat, &raw);
const PipeWire::ThreadLoopLock lock(thread_loop);
pw_stream_connect(stream,
PW_DIRECTION_OUTPUT,
target_id,
@@ -224,7 +225,10 @@ PipeWireOutput::Open(AudioFormat &audio_format)
void
PipeWireOutput::Close() noexcept
{
pw_stream_destroy(stream);
{
const PipeWire::ThreadLoopLock lock(thread_loop);
pw_stream_destroy(stream);
}
// TODO synchronize with Process()?
delete ring_buffer;