From: Jan Schmidt Date: Mon, 2 Nov 2020 15:22:23 +0000 (+1100) Subject: vkdeviceprovider: Avoid deadlock on physical device X-Git-Tag: 1.19.3~507^2~1145 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5f9897745b29827b4c6d62719e4892b335978c2c;p=platform%2Fupstream%2Fgstreamer.git vkdeviceprovider: Avoid deadlock on physical device Don't hold the object lock on the vk physical device while constructing a GstVulkanDevice around it, as GstVulkanDevice can make calls on the physical device that require the object lock. Part-of: --- diff --git a/ext/vulkan/vkdeviceprovider.c b/ext/vulkan/vkdeviceprovider.c index 7432e08..1f8888d 100644 --- a/ext/vulkan/vkdeviceprovider.c +++ b/ext/vulkan/vkdeviceprovider.c @@ -397,17 +397,20 @@ device_context_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) device = g_object_dup_data (G_OBJECT (physical), "vkdeviceprovider.physical.device", (GDuplicateFunc) _ref_if_set, NULL); + GST_OBJECT_UNLOCK (physical); if (!device || !GST_IS_VULKAN_DEVICE (device)) { GWeakRef *ref = g_new0 (GWeakRef, 1); if (device) gst_object_unref (device); device = gst_vulkan_device_new (physical); g_weak_ref_init (ref, device); + + GST_OBJECT_LOCK (physical); g_object_set_data_full (G_OBJECT (physical), "vkdeviceprovider.physical.device", ref, (GDestroyNotify) _ref_free); + GST_OBJECT_UNLOCK (physical); } - GST_OBJECT_UNLOCK (physical); if (gst_vulkan_device_handle_context_query (element, query, device)) { ret = GST_PAD_PROBE_HANDLED;