Axel Uhl
ec320f9fef
bug6302: fix RacingEventService deadlock in new-race-tracker path
...
Two related fixes for the permanent hang where a request thread held the
raceTrackersByRegatta write lock while parked in Object.wait(), timing out all
subsequent requests to the service.
TrackedRaceImpl.waitForAllRaceLogsAttached(): the wait guard re-evaluates the
live attached-race-log count inside the synchronized(latchForRaceLogs) block
instead of a stale local captured before entering the monitor. The stale local
could never change, so a notifyAll() that fired between the initial read and
entering wait() was lost, parking the thread forever (classic lost-wakeup).
RacingEventServiceImpl.addRace(...): split the register-or-notify handshake so
that only *claiming* (removing) the callbacks for the new tracker happens under
the raceTrackersByRegatta write lock, atomically with publishing the tracker;
the callbacks are then *invoked* after the lock is released. A callback may
block during tracker startup (waiting for race logs to attach), and previously
that wait ran while holding the global write lock, turning a single stalled
tracker into a service-wide outage. The read-locked find-or-enqueue in
getRaceTrackerByRegattaAndRaceIdentifier(...) still races atomically against the
claim, so no callback can be lost.
Assisted-By: Claude Opus 4.8
2026-09-12 14:41:49 +02:00
..
2026-07-11 18:29:37 +02:00
2026-07-11 18:29:37 +02:00
2025-10-31 18:33:11 +01:00
2025-11-17 11:05:38 +01:00
2026-01-16 13:09:37 +01:00
2026-01-16 13:09:37 +01:00
2025-12-04 22:10:41 +01:00
2026-04-29 15:58:06 +02:00
2026-03-05 17:21:54 +01:00
2026-04-06 23:34:05 +02:00
2026-03-24 09:59:45 +01:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-08-28 11:16:13 +02:00
2026-09-12 14:41:49 +02:00
2026-03-03 17:30:56 +01:00
2026-08-19 14:20:58 +02:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-05 17:21:54 +01:00
2025-10-13 13:33:10 +02:00
2026-06-29 13:22:14 +02:00
2026-06-15 17:55:19 +02:00
2026-03-03 17:30:56 +01:00
2026-07-02 11:09:09 +02:00
2026-04-06 23:34:05 +02:00
2026-03-03 17:30:56 +01:00
2026-07-07 18:17:48 +02:00
2026-04-14 23:53:52 +02:00
2026-03-31 00:01:34 +02:00
2026-06-27 09:23:22 +02:00
2026-08-28 11:04:17 +02:00
2025-10-24 09:53:33 +02:00
2026-03-03 17:30:56 +01:00
2026-03-07 22:45:42 +01:00
2026-06-30 13:50:12 +02:00
2026-09-11 16:20:42 +02:00
2026-09-11 16:20:42 +02:00
2025-11-03 17:56:58 +01:00
2026-03-03 17:30:56 +01:00
2026-03-27 10:29:49 +01:00
2026-03-03 17:30:56 +01:00
2026-04-30 15:22:22 +00:00
2026-08-24 14:06:14 +02:00
2026-04-06 23:34:05 +02:00
2026-04-06 23:34:05 +02:00
2025-08-13 17:08:52 +02:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-08-28 11:04:17 +02:00
2026-09-08 14:52:10 +02:00
2026-03-05 17:21:54 +01:00
2026-09-01 18:08:07 +02:00
2026-07-08 23:07:32 +02:00
2026-07-28 16:19:08 +02:00
2026-03-20 10:13:08 +01:00
2026-03-25 23:02:55 +01:00
2026-09-05 15:16:35 +02:00
2026-03-25 23:00:52 +01:00
2026-06-21 11:02:12 +02:00
2026-03-03 17:30:56 +01:00
2026-08-28 11:04:17 +02:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-11 23:13:26 +01:00
2026-03-20 10:13:08 +01:00
2026-09-08 17:08:13 +02:00
2026-09-12 14:41:49 +02:00
2026-08-28 11:04:17 +02:00
2026-08-05 13:38:28 +02:00
2026-08-19 14:20:58 +02:00
2026-03-20 10:13:08 +01:00
2026-07-01 15:28:25 +02:00
2026-03-05 17:21:54 +01:00
2026-03-05 17:21:54 +01:00
2026-08-05 13:34:51 +02:00
2026-07-22 08:52:59 +02:00
2026-08-28 11:16:13 +02:00
2025-08-14 15:45:24 +02:00
2026-03-03 17:30:56 +01:00
2026-08-31 14:52:44 +02:00
2026-03-03 17:30:56 +01:00
2026-03-03 17:30:56 +01:00
2026-03-05 17:21:54 +01:00
2026-08-28 11:04:17 +02:00
2026-03-03 17:30:56 +01:00
2026-07-14 10:34:31 +02:00
2026-03-18 16:55:23 +01:00
2026-08-04 13:52:38 +02:00
2026-03-03 17:30:56 +01:00
2026-07-20 19:48:51 +02:00
2026-09-11 16:38:06 +02:00
2025-10-27 23:17:11 +01:00
2026-05-06 15:13:19 +02:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-08-28 19:46:14 +02:00
2026-08-26 02:02:02 +02:00
2025-08-26 16:47:42 +02:00
2026-08-28 11:04:17 +02:00
2026-03-13 09:56:43 +01:00
2026-08-04 13:18:36 +02:00
2026-03-20 10:13:08 +01:00
2026-07-09 11:38:20 +02:00
2026-08-28 11:16:13 +02:00
2025-12-05 11:18:09 +01:00
2026-07-11 18:29:37 +02:00
2026-04-30 15:22:22 +00:00
2026-09-05 15:16:35 +02:00
2026-09-05 15:16:35 +02:00
2026-01-20 10:10:20 +01:00
2026-09-02 20:43:53 +02:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-07-08 23:07:32 +02:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-16 00:53:24 +01:00
2026-04-28 14:32:07 +02:00
2026-04-29 15:50:26 +02:00
2026-09-02 11:15:59 +02:00
2026-04-30 15:22:22 +00:00
2026-03-06 14:54:11 +01:00
2026-03-05 17:21:54 +01:00
2026-03-05 17:21:54 +01:00
2026-03-05 17:21:54 +01:00
2026-09-05 15:38:21 +02:00
2026-03-06 14:48:22 +01:00
2026-03-20 10:13:08 +01:00
2026-06-27 09:23:22 +02:00
2025-08-26 16:47:42 +02:00
2026-03-05 17:21:54 +01:00
2026-08-28 11:16:13 +02:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-03-20 10:13:08 +01:00
2026-09-07 13:31:41 +02:00
2026-07-14 14:41:59 +02:00
2026-03-20 10:13:08 +01:00
2026-03-02 21:09:04 +01:00