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 ...@@ -175,7 +175,10 @@ namespace sw
Renderer::~Renderer() Renderer::~Renderer()
{ {
sync->lock(EXCLUSIVE);
sync->destruct(); sync->destruct();
terminateThreads();
sync->unlock();
delete clipper; delete clipper;
clipper = nullptr; clipper = nullptr;
...@@ -183,15 +186,17 @@ namespace sw ...@@ -183,15 +186,17 @@ namespace sw
delete blitter; delete blitter;
blitter = nullptr; blitter = nullptr;
terminateThreads();
delete resumeApp; delete resumeApp;
resumeApp = nullptr;
for(int draw = 0; draw < DRAW_COUNT; draw++) for(int draw = 0; draw < DRAW_COUNT; draw++)
{ {
delete drawCall[draw]; delete drawCall[draw];
drawCall[draw] = nullptr;
} }
delete swiftConfig; delete swiftConfig;
swiftConfig = nullptr;
} }
// This object has to be mem aligned // This object has to be mem aligned
......
...@@ -209,7 +209,10 @@ namespace sw ...@@ -209,7 +209,10 @@ namespace sw
Renderer::~Renderer() Renderer::~Renderer()
{ {
sync->lock(EXCLUSIVE);
sync->destruct(); sync->destruct();
terminateThreads();
sync->unlock();
delete clipper; delete clipper;
clipper = nullptr; clipper = nullptr;
...@@ -217,15 +220,17 @@ namespace sw ...@@ -217,15 +220,17 @@ namespace sw
delete blitter; delete blitter;
blitter = nullptr; blitter = nullptr;
terminateThreads();
delete resumeApp; delete resumeApp;
resumeApp = nullptr;
for(int draw = 0; draw < DRAW_COUNT; draw++) for(int draw = 0; draw < DRAW_COUNT; draw++)
{ {
delete drawCall[draw]; delete drawCall[draw];
drawCall[draw] = nullptr;
} }
delete swiftConfig; delete swiftConfig;
swiftConfig = nullptr;
} }
// This object has to be mem aligned // 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