gomsgq shadow mode for the carState subscription (NewSubscriber("carState", ..., true, true)). This causes intermittent assert((uint64_t)size < q->size) failures in msgq.cc, resulting in SIGABRT crashes.
The shadow reader has no tracked position in the ring buffer. When the writer (card) laps the untracked reader, the reader picks up a partially overwritten message — the size field is corrupted, tripping the assert. This is timing-dependent: it happens more often under CPU load (e.g. during model inference) when the reader falls behind.
Suggestion
Could the subscription mode be configurable, e.g. via MAPD_SETTINGS JSON? Let forks decide whether to use regular or slotless subscription.
gomsgq shadow mode for the carState subscription (
NewSubscriber("carState", ..., true, true)). This causes intermittent assert((uint64_t)size < q->size) failures in msgq.cc, resulting in SIGABRT crashes.The shadow reader has no tracked position in the ring buffer. When the writer (card) laps the untracked reader, the reader picks up a partially overwritten message — the size field is corrupted, tripping the assert. This is timing-dependent: it happens more often under CPU load (e.g. during model inference) when the reader falls behind.
Suggestion
Could the subscription mode be configurable, e.g. via
MAPD_SETTINGSJSON? Let forks decide whether to use regular or slotless subscription.