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 |
|---|---|---|
| .. | ||
| media | Loading commit data... | |
| EGLAndroidFrameBufferTargetTest.cpp | Loading commit data... | |
| EGLBackwardsCompatibleContextTest.cpp | Loading commit data... | |
| EGLBlobCacheTest.cpp | Loading commit data... | |
| EGLBufferAgeTest.cpp | Loading commit data... | |
| EGLChooseConfigTest.cpp | Loading commit data... | |
| EGLContextASANTest.cpp | Loading commit data... | |
| EGLContextCompatibilityTest.cpp | Loading commit data... | |
| EGLContextSharingTest.cpp | Loading commit data... | |
| EGLCreateContextAttribsTest.cpp | Loading commit data... | |
| EGLDebugTest.cpp | Loading commit data... | |
| EGLDeviceCGLTest.cpp | Loading commit data... | |
| EGLDeviceTest.cpp | Loading commit data... | |
| EGLDirectCompositionTest.cpp | Loading commit data... | |
| EGLDisplayLuidTest.cpp | Loading commit data... | |
| EGLFeatureControlTest.cpp | Loading commit data... | |
| EGLIOSurfaceClientBufferTest.cpp | Loading commit data... | |
| EGLMultiContextTest.cpp | Loading commit data... | |
| EGLMultiThreadSteps.h | Loading commit data... | |
| EGLNoConfigContextTest.cpp | Loading commit data... | |
| EGLPreRotationTest.cpp | Loading commit data... | |
| EGLPresentPathD3D11Test.cpp | Loading commit data... | |
| EGLPrintEGLinfoTest.cpp | Loading commit data... | |
| EGLProgramCacheControlTest.cpp | Loading commit data... | |
| EGLQueryContextTest.cpp | Loading commit data... | |
| EGLReadinessCheckTest.cpp | Loading commit data... | |
| EGLRecordableTest.cpp | Loading commit data... | |
| EGLRobustnessTest.cpp | Loading commit data... | |
| EGLStreamTest.cpp | Loading commit data... | |
| EGLSurfaceTest.cpp | Loading commit data... | |
| EGLSurfaceTestMac.mm | Loading commit data... | |
| EGLSurfacelessContextTest.cpp | Loading commit data... | |
| EGLSyncControlTest.cpp | Loading commit data... | |
| EGLSyncTest.cpp | Loading commit data... | |
| EGLX11VisualTest.cpp | Loading commit data... |