On Mon, 3 Mar 2025 21:42:26 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> The above does require though that `Platform.accessibilityActiveProperty()` 
>> is properly synchronized.  I think it may be a good idea to fix that first.  
>> Perhaps all platform provided properties (if there are more) should ensure 
>> they're only initialized once.
>
> unrelated, but I would rather disallow background access to any platform 
> properties.
> 
> _per the earlier email_, this might (read: will) create concurrent access 
> when the node is not yet attached to the scene graph:
> 
> 
> background thread                   fx app thread
> 1. start creating the node
> 2. add listener to platform prop
> 3. keep initializing the node        <-- platform property change notification
> 4. some more code
> 
> 
> step 3 is when concurrent access occurs.

There is an even more fundamental problem: JavaFX properties are not 
thread-safe. You cannot safely add a listener or binding to a property in one 
thread while another thread modifies that property's value.

So I think that deferring the binding to 
`Platform::accessibilityActiveProperty` is the only viable approach.There might 
still be an opportunity to simplify it a bit along the lines of what John 
mentions, as long as the code that binds to the property is guaranteed to be 
run on  the FX application thread.

We can be certain that setting the window property to a non-null value only 
happens on the FX app thread (`Stage::setScene` enforces that threading 
constraint).

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1697#discussion_r1979801247

Reply via email to