summaryrefslogtreecommitdiff
path: root/media-video/pipewire/files/0.3.77/0001-gst-prevent-crash-stopping-device-provider.patch
blob: 9b6373da139057a37b5db541c205246155cf7471 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/140374d2071e6204fded4ca65645d4e9a3dd053e
https://bugs.webkit.org/show_bug.cgi?id=259735

From 140374d2071e6204fded4ca65645d4e9a3dd053e Mon Sep 17 00:00:00 2001
From: Philippe Normand <philn@igalia.com>
Date: Fri, 4 Aug 2023 10:01:07 +0100
Subject: [PATCH] gst: Prevent a crash when stopping device provider

The provider might fail to connect to the PipeWire core when starting up, so
when stopping we need to check the core is valid before attempting to acquire a
mutex on its loop.
--- a/src/gst/gstpipewiredeviceprovider.c
+++ b/src/gst/gstpipewiredeviceprovider.c
@@ -665,11 +665,16 @@ gst_pipewire_device_provider_stop (GstDeviceProvider * provider)
 {
   GstPipeWireDeviceProvider *self = GST_PIPEWIRE_DEVICE_PROVIDER (provider);
 
-  pw_thread_loop_lock (self->core->loop);
+  /* core might be NULL if we failed to connect in _start. */
+  if (self->core != NULL) {
+    pw_thread_loop_lock (self->core->loop);
+  }
   GST_DEBUG_OBJECT (self, "stopping provider");
 
   g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy);
-  pw_thread_loop_unlock (self->core->loop);
+  if (self->core != NULL) {
+    pw_thread_loop_unlock (self->core->loop);
+  }
   g_clear_pointer (&self->core, gst_pipewire_core_release);
 }
 
-- 
GitLab