On Tue, 24 Jun 2025 17:34:54 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>>> That only affects the case where the second thread tries to read shared 
>>> data (unrelated to GraphicsDevice) without synchronization, which was 
>>> written before the first thread called getFullScreenWindow(). If visibility 
>>> is required, it should be ensured by the caller. Depending on some internal 
>>> and undocumented lock for that is not a good thing.
>> 
>> It is true… but it affects the fields of the full screen window itself. 
>> Doesn't any code path uses the fields of the full screen window after 
>> getting an object reference to it?
>
> Window fields may be modified at any time by different threads, such as the 
> EDT, Toolkit thread, or others. Without proper synchronization, this can lead 
> to race conditions. Even in the scenario we discussed where 
> getFullScreenWindow() is called twice a race condition can still occur. For 
> example if the first thread modifies the Window and then calls 
> getFullScreenWindow(), and at the same time, a second thread also calls 
> getFullScreenWindow() and attempts to read the Window's fields, a race may 
> occur if the first thread begins modifying the Window again before its next 
> call to getFullScreenWindow().

Yes, I agree race conditions and memory inconsistencies are still in place, 
however, the synchronized block brought the state of the full screen object to 
a fresher state.

I looked through the usages of `getFullScreenWindow()` and couldn't find any 
usages of full screen window fields, so a `volatile` modifier seems appropriate.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25818#discussion_r2166941317

Reply via email to