From 07e8731776ce81eadac7e9e63c1a5affb86208cc Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 13 Nov 2019 17:21:46 +0000 Subject: [PATCH] Protect against buffer view being closed during async render thread work --- qrenderdoc/Windows/BufferViewer.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index e69f6388c..b6fe08fab 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -2181,7 +2181,12 @@ void BufferViewer::OnEventChanged(uint32_t eventId) ui->viewIndex->setValue(0); } - m_Ctx.Replay().AsyncInvoke([this, bufdata](IReplayController *r) { + QPointer me; + + m_Ctx.Replay().AsyncInvoke([this, me, bufdata](IReplayController *r) { + + if(!me) + return; BufferData *buf = NULL; @@ -2327,8 +2332,13 @@ void BufferViewer::populateBBox(PopulateBufferData *bufdata) bbox->input[1] = bufdata->vsoutConfig; bbox->input[2] = bufdata->vsoutConfig; + QPointer me; + // fire up a thread to calculate the bounding box - LambdaThread *thread = new LambdaThread([this, bbox] { + LambdaThread *thread = new LambdaThread([this, me, bbox] { + if(!me) + return; + calcBoundingData(*bbox); GUIInvoke::call(this, [this, bbox]() { UI_UpdateBoundingBox(*bbox); }); @@ -2859,7 +2869,12 @@ void BufferViewer::render_clicked(QMouseEvent *e) if((e->buttons() & Qt::RightButton) && m_Output) { - m_Ctx.Replay().AsyncInvoke(lit("PickVertex"), [this, curpos](IReplayController *r) { + QPointer me; + + m_Ctx.Replay().AsyncInvoke(lit("PickVertex"), [this, me, curpos](IReplayController *r) { + if(!me) + return; + uint32_t instanceSelected = 0; uint32_t vertSelected = 0;