On Tue, 4 Mar 2025 19:00:06 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

> Summary
> -------
> 
> Adds a thread check to a number of `Platform` methods:
> 
> accessibilityActiveProperty()
> getPreferences()
> isAccessibilityActive()
> 
> These methods will throw an `IllegalStateException` if called on a thread 
> other than the JavaFX Application Thread.
> 
> Problem
> -------
> 
> JavaFX allows the Nodes and Scenes to be created and modified on any thread 
> as long as they are not yet attached to a `Window` that is showing.
> 
> This is allowed in an implicit assumption that the construction code only 
> modifies the properties of the said Nodes and Scenes, but not other static or 
> global entities.  Concurrent multi-threaded access of such entities not only 
> breaks the initialization of the properties, but also causes the failures 
> down the road, if the change to the global properties happens while the Nodes 
> and Scenes are still being constructed.
> 
> Even JavaFX platform developers did not avoid tripping over this issue, as 
> can be illustrated by https://bugs.openjdk.org/browse/JDK-8348987 . 
> 
> Solution
> --------
> 
> Fail each method fast with an  `IllegalStateException` if called from a 
> background thread.
> 
> While this solution won't prevent other possible abuse, such as getting a 
> reference to the property in the JavaFX Application Thread and later 
> accessing it in a background thread, adding a check and allowing these 
> methods to fail fast should prevent most likely scenarios.

This pull request has now been integrated.

Changeset: a87f0a55
Author:    Andy Goryachev <ango...@openjdk.org>
URL:       
https://git.openjdk.org/jfx/commit/a87f0a55114e23ba6caeae28be7c910da584b5fa
Stats:     42 lines in 2 files changed: 24 ins; 14 del; 4 mod

8351067: Enforce Platform threading use

Reviewed-by: kcr, mstrauss

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

PR: https://git.openjdk.org/jfx/pull/1728

Reply via email to