A crash can occur if thread A is executing eglDestroyContext while
thread B issues a draw call, if the threads are interleaved in such a
manner that a makeCurrent occurs without triggering a change to the
global context and a dirtyAllState call. We handle that case by
explicitly making current the proper contexts in the eglDestroyContext
call.
A test has been added that triggers a crash without this fix when
running on the D3D11 backend. In addition, all of MultithreadingTest
is enabled for the D3D11 backend.
Test: Ran MultithreadingTest. Test exhibits a crash before this
change, and does not after this change. Also ran:
dEQP-EGL.functional.sharing.gles2.multithread.*
dEQP-EGL.functional.multithread.*
Bug: b/183756357
Change-Id: Ic6f76a062868b2f3b4e60d29dc087ec180bfb7cd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2798591Reviewed-by:
Geoff Lang <geofflang@chromium.org>
Reviewed-by:
Jamie Madill <jmadill@chromium.org>
Commit-Queue: Doug Horn <doughorn@google.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| runner | Loading commit data... | |
| third_party | Loading commit data... | |
| ANGLETest.cpp | Loading commit data... | |
| ANGLETest.h | Loading commit data... | |
| ConstantFoldingTest.cpp | Loading commit data... | |
| ConstantFoldingTest.h | Loading commit data... | |
| MultiviewTest.cpp | Loading commit data... | |
| MultiviewTest.h | Loading commit data... | |
| ShaderCompileTreeTest.cpp | Loading commit data... | |
| ShaderCompileTreeTest.h | Loading commit data... | |
| ShaderExtensionTest.h | Loading commit data... | |
| VulkanExternalHelper.cpp | Loading commit data... | |
| VulkanExternalHelper.h | Loading commit data... | |
| angle_test_configs.cpp | Loading commit data... | |
| angle_test_configs.h | Loading commit data... | |
| angle_test_instantiate.cpp | Loading commit data... | |
| angle_test_instantiate.h | Loading commit data... | |
| angle_test_instantiate_apple.h | Loading commit data... | |
| angle_test_instantiate_apple.mm | Loading commit data... | |
| angle_test_platform.cpp | Loading commit data... | |
| angle_test_platform.h | Loading commit data... | |
| compiler_test.cpp | Loading commit data... | |
| compiler_test.h | Loading commit data... | |
| draw_call_perf_utils.cpp | Loading commit data... | |
| draw_call_perf_utils.h | Loading commit data... | |
| gl_raii.h | Loading commit data... |