From db47f46ad71ce2e486bfadcbc62dd8fb7f024373 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Wed, 5 Jun 2024 00:20:05 +0900 Subject: [PATCH] d3d12commandqueue: Fix deadlock on drain() Don't take lock if the drain() is called from the GC thread Part-of: --- .../gst-libs/gst/d3d12/gstd3d12commandqueue.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12commandqueue.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12commandqueue.cpp index df85ddaf0a..5a9cbaf4b3 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12commandqueue.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12commandqueue.cpp @@ -570,9 +570,13 @@ gst_d3d12_command_queue_drain (GstD3D12CommandQueue * queue) } { - std::lock_guard < std::mutex > lk (priv->lock); - gc_list = priv->gc_list; - priv->gc_list = { }; + if (priv->gc_thread != g_thread_self ()) { + std::lock_guard < std::mutex > lk (priv->lock); + gc_list = priv->gc_list; + priv->gc_list = { }; + } else { + priv->gc_list = { }; + } } }