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