Commit 3fc635ac by Ben Clayton

GLES: Fix race in Renderer destruction

The clipper and blitter were being destructed before the worker threads were stopped. Also nullify after deleting other fields - this would have been much harder to detect if the clipper and blitter were not already being nullified after destruction. Tested with: ./unittests --gtest_repeat=100 --gtest_filter=SwiftShaderTest.TransformFeedback_DrawArraysInstanced Bug: b/124288179 Change-Id: Iefea829dfb8556c877c0a086253c5924c54aa638 Reviewed-on: https://swiftshader-review.googlesource.com/c/24748Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarBen Clayton <bclayton@google.com>
parent 0eee3325
......@@ -175,7 +175,10 @@ namespace sw
Renderer::~Renderer()
{
sync->lock(EXCLUSIVE);
sync->destruct();
terminateThreads();
sync->unlock();
delete clipper;
clipper = nullptr;
......@@ -183,15 +186,17 @@ namespace sw
delete blitter;
blitter = nullptr;
terminateThreads();
delete resumeApp;
resumeApp = nullptr;
for(int draw = 0; draw < DRAW_COUNT; draw++)
{
delete drawCall[draw];
drawCall[draw] = nullptr;
}
delete swiftConfig;
swiftConfig = nullptr;
}
// This object has to be mem aligned
......
......@@ -209,7 +209,10 @@ namespace sw
Renderer::~Renderer()
{
sync->lock(EXCLUSIVE);
sync->destruct();
terminateThreads();
sync->unlock();
delete clipper;
clipper = nullptr;
......@@ -217,15 +220,17 @@ namespace sw
delete blitter;
blitter = nullptr;
terminateThreads();
delete resumeApp;
resumeApp = nullptr;
for(int draw = 0; draw < DRAW_COUNT; draw++)
{
delete drawCall[draw];
drawCall[draw] = nullptr;
}
delete swiftConfig;
swiftConfig = nullptr;
}
// This object has to be mem aligned
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment