[idd] scheduler: preserve concurrent force requests

Replace the shared force and republish booleans with request tickets.
A completed publication now acknowledges only requests captured when it
began, so a concurrent immediate or cadence-break request survives.
This commit is contained in:
Geoffrey McRae
2026-08-06 14:49:30 +10:00
parent 92f46f693f
commit 909271bfe1
2 changed files with 50 additions and 23 deletions

View File

@@ -39,6 +39,8 @@ public:
uint32_t epoch;
uint64_t period;
uint64_t targetSlack;
uint64_t forceTicket;
uint64_t republishTicket;
};
private:
@@ -65,10 +67,14 @@ private:
Client m_clients[LGMP_MAX_CLIENTS] = {};
Schedule m_schedule = {};
bool m_scheduling = false;
bool m_forceNext = false;
bool m_republishNext = false;
uint32_t m_epoch = 0;
// A result acknowledges only the request tickets captured by its attempt.
uint64_t m_forceRequestTicket = 0;
uint64_t m_forceAckTicket = 0;
uint64_t m_republishRequestTicket = 0;
uint64_t m_republishAckTicket = 0;
uint64_t m_lastArrival = 0;
uint64_t m_guestPeriod = 0;
uint64_t m_workEstimate = 0;