pipewire: If hotplug initialization fails, clean up any partial success

hotplug_loop_init() calls pw_context_new(), which creates a thread
internally (for the "data loop"). It also creates a thread of its own,
the `hotplug_loop`.

Both of these threads are running code from libpipewire, so before we
can allow the Pipewire library to be unloaded, we need to destroy
the context with pw_context_destroy() and destroy the `hotplug_loop`
with pw_thread_loop_destroy().

Resolves: https://github.com/libsdl-org/SDL/issues/10787
Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie
2024-09-10 20:41:07 +01:00
committed by Sam Lantinga
parent 817f1b3da8
commit 9c8c6da476

View File

@@ -1252,6 +1252,7 @@ static bool PipewireInitialize(SDL_AudioDriverImpl *impl)
}
if (!hotplug_loop_init()) {
hotplug_loop_destroy();
PIPEWIRE_Deinitialize();
return false;
}