Jonathan Bennett and Claude Opus 5
e5c559a1c8
Make the frame-end anchor atomic
...
The radio worker writes lastFrameEndMs from onNotify() while a draw for a
packet being queued reads it on whatever thread called send(), so the access
was an unsynchronized read of a plain uint32_t. std::atomic with relaxed
ordering is free on every target here and matches MeshService's fromNum.
Relaxed is the right ordering: the anchor publishes nothing but itself, both
writers are the radio worker so the compare-then-store races with no other
write, and losing the race against a reader only anchors that one draw to the
frame before last.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01MkrqYBzhAxyybmoezb1TJV
2026-10-10 15:24:32 +00:00
..
2026-09-24 22:41:37 +00:00
2026-08-01 16:23:30 +00:00
2026-09-14 12:19:02 +00:00
2026-10-10 15:24:32 +00:00
2026-09-16 22:01:55 +00:00
2026-09-01 23:41:52 +00:00
2026-10-07 01:21:11 +00:00
2026-09-14 12:19:02 +00:00
2026-09-17 22:24:29 +00:00
2026-09-24 07:15:54 +00:00
2026-10-03 03:19:01 +00:00
2026-10-03 03:19:01 +00:00
2026-09-14 06:32:35 +00:00
2026-09-14 06:32:35 +00:00
2026-09-14 06:32:35 +00:00
2026-09-14 06:32:35 +00:00
2026-10-07 12:04:13 -05:00
2026-10-07 11:42:11 +00:00
2026-07-29 10:54:48 +00:00
2026-10-02 01:50:43 +00:00
2026-07-09 17:48:55 -07:00
2026-07-09 17:48:55 -07:00
2026-09-15 07:16:33 +00:00
2026-04-21 09:57:06 -05:00
2026-09-14 12:19:02 +00:00
2026-08-01 16:23:30 +00:00
2026-07-30 10:44:52 +00:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-09-24 22:41:37 +00:00
2026-06-18 07:07:50 -05:00
2026-10-09 11:40:29 -05:00
2026-10-09 11:40:29 -05:00
2026-10-07 00:07:30 +00:00
2026-10-10 10:15:21 -05:00
2026-10-10 10:15:21 -05:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-07-30 10:44:52 +00:00
2026-05-07 20:24:39 -05:00
2026-08-10 01:02:19 +00:00
2026-01-04 05:15:53 -06:00
2026-09-10 17:46:44 +00:00
2026-10-05 17:05:46 +00:00
2026-09-24 22:41:37 +00:00
2026-08-13 13:15:21 -04:00
2026-01-04 05:15:53 -06:00
2026-08-13 17:36:06 -05:00
2026-10-06 14:30:19 +00:00
2026-09-09 06:35:14 +00:00
2026-10-06 14:30:19 +00:00
2026-10-08 16:23:26 +00:00
2026-09-17 09:36:41 +00:00
2026-10-09 12:01:07 +00:00
2026-10-09 12:01:07 +00:00
2026-09-11 18:51:10 +00:00
2026-10-05 17:05:46 +00:00
2026-09-24 22:41:37 +00:00
2026-09-18 08:50:20 +00:00
2026-09-17 09:36:41 +00:00
2026-04-21 09:57:00 -05:00
2026-08-18 21:58:51 +00:00
2026-08-18 21:58:51 +00:00
2023-01-21 21:23:24 +01:00
2026-09-24 22:41:37 +00:00
2026-10-10 15:24:32 +00:00
2026-10-10 15:24:32 +00:00
2026-10-10 15:24:32 +00:00
2026-10-10 15:24:32 +00:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-10-10 15:24:32 +00:00
2026-10-10 15:24:32 +00:00
2026-09-25 13:33:58 +00:00
2026-09-25 13:33:58 +00:00
2026-10-09 11:40:29 -05:00
2026-10-09 11:40:29 -05:00
2026-10-08 16:23:26 +00:00
2026-10-08 16:23:26 +00:00
2026-07-21 10:19:38 +02:00
2026-01-04 05:15:53 -06:00
2026-10-06 21:27:47 +00:00
2026-01-04 05:15:53 -06:00
2026-08-18 12:41:08 +00:00
2026-08-14 10:41:44 -05:00
2026-07-11 06:27:50 -05:00
2026-07-11 06:27:50 -05:00
2026-10-09 11:40:29 -05:00
2026-10-09 11:40:29 -05:00
2026-10-09 11:40:29 -05:00
2026-10-09 11:40:29 -05:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-01-04 05:15:53 -06:00
2026-09-23 09:10:38 +00:00
2026-09-23 09:10:38 +00:00
2026-09-14 12:19:02 +00:00
2026-07-01 19:01:27 -05:00
2026-09-11 18:51:10 +00:00
2026-05-09 15:12:10 -05:00
2026-01-04 05:15:53 -06:00
2026-09-17 22:31:32 +00:00
2026-09-24 22:41:37 +00:00