On Tue, 10 Jun 2025 07:40:07 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
>>> Yes, we can do that. I had the idea to use it so that UnlinkObjects() would >>> be invoked by the EDT, which would eliminate the race condition. >> >> Looks like the UnlinkObjects and _GetScreenImOn is already executed under >> the same lock: >> - WComponentPeer.dispose->AwtObject::_Dispose()->Lock on >> SyncCS->WM_AWT_DISPOSEPDATA->awt_Component.cpp.dispose()->UnlinkObjects() >> - WWindowPeer.getScreenImOn()->SyncCall()->Lock on >> SyncCS->AwtWindow._GetScreenImOn() >> >> I think the only thing you should do is to replace the usage of >> JNI_GET_PDATA by the JNI_CHECK_PEER_GOTO and add a label "ret" at the end so >> default value of "result" will be returned. > > check how the _SetFocusableWindow is implemented below. Hello @mrserb, > I think the only thing you should do is to replace the usage of JNI_GET_PDATA > by the JNI_CHECK_PEER_GOTO and add a label "ret" at the end so default value > of "result" will be returned. Yes, In the latest changes, I followed that approach to ensure that the peer is not yet destroyed in _GetScreenImOn() as explain in my latest comment. So if you agree I will remove the lock. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/25619#discussion_r2137650714