Repository navigation
fix(android): destroy SinkSurface on the GL thread - #248
Merged
parkergrt merged 1 commit intoSep 26, 2026
Merged
Conversation
nativeDestroy/nativeFinalize/nativeReleaseSurface tear down an EGL surface and GL program from whatever thread calls them — in practice the main thread from an Android lifecycle callback, with no GL context current. Construction already hops onto GPUPixel's GL thread; teardown did not, so it could corrupt EGL state and abort later with an error far from the cause (e.g. a mutex FORTIFY check). Run teardown via SyncRunWithContext, and null-check before delete.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
nativeDestroy,nativeFinalizeandnativeReleaseSurfacetear down an EGL surface and delete a GL program from whatever thread calls them — in practice the main thread, from an Android lifecycle callback, with no GL context current. Construction already hops onto GPUPixel's GL thread viaSyncRunWithContext; teardown did not. This can corrupt EGL state and abort later, far from the cause (e.g. apthread_mutexFORTIFY check).Fix
Run the three teardown paths through
GPUPixelContext::SyncRunWithContextso they hold the context, and null-check the pointer innativeDestroybeforedelete.Verified on Android: repeated attach/detach cycles with no EGL error or abort.