mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1754>
This commit is contained in:
parent
d1f397e754
commit
5f9897745b
1 changed files with 4 additions and 1 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue