On Tue, 6 May 2025 07:33:07 GMT, Michael Strauß <[email protected]> wrote:
>> modules/javafx.graphics/src/main/java/com/sun/javafx/application/preferences/PreferenceProperties.java
>> line 184:
>>
>>> 182:
>>> 183: for (DeferredProperty<?> property :
>>> deferredProperties.values()) {
>>> 184: property.fireValueChangedIfNecessary();
>>
>> firing events from a synchronized method is a recipe for a lockup.
>> JavaFX is still a single threaded toolkit (if we ignore the creation of
>> certain objects aspect), why do we want to synchronize?
>
> I've moved the `fireValueChangedIfNecessary` out of the synchronized block.
> We need the synchronized block as a memory barrier to see the latest value of
> the `effectiveValue` field, as we need to be able to read it from any thread.
Maybe a `volatile` would be a better choice then?
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1655#discussion_r2075657221