From 6653316a62f6168b3e45040358cb77612dcffcb8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 12 Nov 2019 17:10:33 +0000 Subject: [PATCH] Protect against window being closed during async render thread work --- qrenderdoc/Windows/ShaderViewer.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index 9bc858d45..e651674ef 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -345,7 +345,12 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR { m_Stage = m_ShaderDetails->stage; - m_Ctx.Replay().AsyncInvoke([this](IReplayController *r) { + QPointer me(this); + + m_Ctx.Replay().AsyncInvoke([me, this](IReplayController *r) { + if(!me) + return; + rdcarray targets = r->GetDisassemblyTargets(); rdcstr disasm = r->DisassembleShader(m_Pipeline, m_ShaderDetails, ""); @@ -1221,7 +1226,12 @@ void ShaderViewer::disassemble_typeChanged(int index) } } - m_Ctx.Replay().AsyncInvoke([this, target](IReplayController *r) { + QPointer me(this); + + m_Ctx.Replay().AsyncInvoke([me, this, target](IReplayController *r) { + if(!me) + return; + rdcstr disasm = r->DisassembleShader(m_Pipeline, m_ShaderDetails, target.data()); GUIInvoke::call(this, [this, disasm]() {