On Thu, 12 Feb 2026 23:03:31 GMT, Florian Kirmaier <[email protected]> wrote:
> Add `synchronized(lock)` around array mutations in > `addPulseReceiver`/`removePulseReceiver`/`addAnimationTimer`/`removeAnimationTimer` > and around snapshot-taking in `timePulseImpl`. Iteration remains outside the > lock. `updateAnimationRunnable()` is also called outside the lock to avoid > nested locking. > > This preserves the existing copy-on-write design - the lock just ensures it > works correctly across threads. Performance impact is minimal: the lock only > covers field reads/writes, not the per-frame iteration. > > **Testing:** > New `AbstractPrimaryTimerThreadSafetyTest` with > `testConcurrentAddAnimationTimer` - 8 threads add timers simultaneously, > repeated 100 times. Fails 100% without fix. Reuses `AbstractPrimaryTimerStub` > from existing tests. > > All existing animation tests pass. > > In JPro, this often caused a Deadlock during startup. > This might have caused many bugs, which are very hard to reproduce. This pull request has been closed without being integrated. ------------- PR: https://git.openjdk.org/jfx/pull/2074
