• dev-155 6f2f82f667

    Ghost released this 2026-07-11 21:42:42 +03:00 | 2648 commits to dev since this release

    wakeEndpoint reads RequestState flags under _mutex from lease-releasing
    threads, which exposed two unlocked writers:

    • commitAdmitted's delayed-open branch stored the admission/openSlot into
      the still-enqueued state and then reset them via releaseAdmission()
      outside _mutex, racing with claimFront/wakeEndpoint reads of
      state->admission (torn std::optional read). The lease/reservation now
      stay in the local verdict and are released after the unlock; the queued
      front's state->admission is never mutated unlocked. Behavior is
      unchanged (a delayed front always ended with an empty admission).

    • scheduleOpenRetry cleared openRetryScheduled without the lock; now
      cleared under _mutex, mirroring the wakeScheduled fix.

    Also register test_broker_rechecks_scheduler_after_delayed_open_slot in
    main (it was defined but never called, so its assertions never ran)
    and update it plus the open-scheduler test to the new release path.

    Downloads