RFR: 8368879: Intermittent crash on exit when disposing MTLRTTextureData
Ambarish Rapte
arapte at openjdk.org
Wed Oct 8 04:54:08 UTC 2025
**Issue**:
Intermittent crash on exit in `MTLRTTextureData::dispose()` during toolkit shutdown
The crash is very rare and difficult to reproduce.
**Cause**:
While exiting an app, in `MTLContext.dispose()`, a Texture is released **after** the native peer MetalConext is disposed.
- MTLContext.dispose() method:
@Override
public void dispose() {
nRelease(pContext);
state = null;
super.dispose();
}
1. The `MTLContext.dispose()` method releases the native peer (`nRelease(pContext)`) before calling `super.dispose()` (i.e., `BaseShaderContext.dispose()`).
2. `BaseShaderContext.dispose()` calls `disposeLCDBuffer()` to dispose the LCD texture, which in turn invokes `MTLRTTextureData::dispose()`
=> As native MetalContext is already disposed, it causes a crash.
**Fix**:
Call `disposeLCDBuffer()` before `nRelease(pContext)`. so that the Texture is released **before** disposing the native peer MetalContext.
The scenario is very rare to reproduce, so no test is added.
-------------
Commit messages:
- disposeLCDBuffer b4 nRelease(pContext)
Changes: https://git.openjdk.org/jfx/pull/1931/files
Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1931&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8368879
Stats: 1 line in 1 file changed: 1 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jfx/pull/1931.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1931/head:pull/1931
PR: https://git.openjdk.org/jfx/pull/1931
More information about the openjfx-dev
mailing list