Browse Source

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>
Simon McVittie 7 months ago
parent
commit
9c8c6da476
1 changed files with 1 additions and 0 deletions
  1. 1 0
      src/audio/pipewire/SDL_pipewire.c

+ 1 - 0
src/audio/pipewire/SDL_pipewire.c

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