From 6d1b209d0c980bdcb85a6cb23591bafae342e1aa Mon Sep 17 00:00:00 2001 From: Silvio Vilerino Date: Tue, 7 Apr 2026 12:06:05 -0400 Subject: [PATCH] d3d12: Check queues are registered before unregistering in unregister_work_queue Reviewed-by: Pohsiang (John) Hsu Part-of: --- src/gallium/drivers/d3d12/d3d12_video_enc.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_video_enc.cpp b/src/gallium/drivers/d3d12/d3d12_video_enc.cpp index da32fc36541..3be2e4b725a 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_enc.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_enc.cpp @@ -292,13 +292,17 @@ d3d12_video_encoder_destroy(struct pipe_video_codec *codec) struct d3d12_context* ctx = d3d12_context(pD3D12Enc->base.context); if (ctx->priority_manager) { - if (ctx->priority_manager->unregister_work_queue(ctx->priority_manager, pD3D12Enc->m_spEncodeCommandQueue.Get()) != 0) + // Command queues may be NULL when destroy is called from a failed creation path before initialization reached + // the point of registering the command queues, so check for nullptr before trying to unregister from priority manager + if (pD3D12Enc->m_spEncodeCommandQueue && + ctx->priority_manager->unregister_work_queue(ctx->priority_manager, pD3D12Enc->m_spEncodeCommandQueue.Get()) != 0) { debug_printf("D3D12: Failed to unregister command queue with frontend priority manager\n"); assert(false); } - if (ctx->priority_manager->unregister_work_queue(ctx->priority_manager, pD3D12Enc->m_spResolveCommandQueue.Get()) != 0) + if (pD3D12Enc->m_spResolveCommandQueue && + ctx->priority_manager->unregister_work_queue(ctx->priority_manager, pD3D12Enc->m_spResolveCommandQueue.Get()) != 0) { debug_printf("D3D12: Failed to unregister command queue with frontend priority manager\n"); assert(false);