mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-08-22 15:11:31 +00:00
[client] scheduler: retain pending control flags
This commit is contained in:
@@ -48,6 +48,7 @@ static struct
|
|||||||
bool controlFaulted;
|
bool controlFaulted;
|
||||||
bool enqueueFaulted;
|
bool enqueueFaulted;
|
||||||
bool immediatePending;
|
bool immediatePending;
|
||||||
|
bool resetPending;
|
||||||
_Atomic(uint32_t) generation;
|
_Atomic(uint32_t) generation;
|
||||||
_Atomic(uint64_t) period;
|
_Atomic(uint64_t) period;
|
||||||
uint64_t lastSend;
|
uint64_t lastSend;
|
||||||
@@ -129,6 +130,14 @@ static bool sendSchedule(LG_TransportFrameScheduleFlags flags,
|
|||||||
if (!controlReady(now))
|
if (!controlReady(now))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (flags & LG_TRANSPORT_FRAME_SCHEDULE_ACTIVE)
|
||||||
|
{
|
||||||
|
if (l_frameScheduler.resetPending)
|
||||||
|
flags |= LG_TRANSPORT_FRAME_SCHEDULE_RESET;
|
||||||
|
if (l_frameScheduler.immediatePending)
|
||||||
|
flags |= LG_TRANSPORT_FRAME_SCHEDULE_IMMEDIATE;
|
||||||
|
}
|
||||||
|
|
||||||
int64_t phaseError;
|
int64_t phaseError;
|
||||||
uint32_t feedbackFrameSerial;
|
uint32_t feedbackFrameSerial;
|
||||||
uint32_t feedbackScheduleEpoch;
|
uint32_t feedbackScheduleEpoch;
|
||||||
@@ -175,6 +184,8 @@ static bool sendSchedule(LG_TransportFrameScheduleFlags flags,
|
|||||||
now + FRAME_SCHEDULER_CONTROL_RETRY_NS;
|
now + FRAME_SCHEDULER_CONTROL_RETRY_NS;
|
||||||
l_frameScheduler.controlRetryDelay =
|
l_frameScheduler.controlRetryDelay =
|
||||||
FRAME_SCHEDULER_CONTROL_RETRY_NS;
|
FRAME_SCHEDULER_CONTROL_RETRY_NS;
|
||||||
|
if (flags & LG_TRANSPORT_FRAME_SCHEDULE_RESET)
|
||||||
|
l_frameScheduler.resetPending = false;
|
||||||
if (flags & LG_TRANSPORT_FRAME_SCHEDULE_IMMEDIATE)
|
if (flags & LG_TRANSPORT_FRAME_SCHEDULE_IMMEDIATE)
|
||||||
l_frameScheduler.immediatePending = false;
|
l_frameScheduler.immediatePending = false;
|
||||||
LG_LOCK(l_frameScheduler.lock);
|
LG_LOCK(l_frameScheduler.lock);
|
||||||
@@ -206,6 +217,7 @@ void frameScheduler_start(LG_TransportFeatureFlags features)
|
|||||||
l_frameScheduler.controlFaulted = false;
|
l_frameScheduler.controlFaulted = false;
|
||||||
l_frameScheduler.enqueueFaulted = false;
|
l_frameScheduler.enqueueFaulted = false;
|
||||||
l_frameScheduler.immediatePending = true;
|
l_frameScheduler.immediatePending = true;
|
||||||
|
l_frameScheduler.resetPending = false;
|
||||||
l_frameScheduler.lastSend = 0;
|
l_frameScheduler.lastSend = 0;
|
||||||
l_frameScheduler.nextControlCheck = 0;
|
l_frameScheduler.nextControlCheck = 0;
|
||||||
l_frameScheduler.controlRetryDelay =
|
l_frameScheduler.controlRetryDelay =
|
||||||
@@ -240,6 +252,7 @@ void frameScheduler_stop(void)
|
|||||||
l_frameScheduler.controlFaulted = false;
|
l_frameScheduler.controlFaulted = false;
|
||||||
l_frameScheduler.enqueueFaulted = false;
|
l_frameScheduler.enqueueFaulted = false;
|
||||||
l_frameScheduler.immediatePending = false;
|
l_frameScheduler.immediatePending = false;
|
||||||
|
l_frameScheduler.resetPending = false;
|
||||||
l_frameScheduler.nextControlCheck = 0;
|
l_frameScheduler.nextControlCheck = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,6 +310,7 @@ void frameScheduler_update(void)
|
|||||||
l_frameScheduler.period = period;
|
l_frameScheduler.period = period;
|
||||||
++l_frameScheduler.generation;
|
++l_frameScheduler.generation;
|
||||||
l_frameScheduler.immediatePending = true;
|
l_frameScheduler.immediatePending = true;
|
||||||
|
l_frameScheduler.resetPending = true;
|
||||||
LG_LOCK(l_frameScheduler.lock);
|
LG_LOCK(l_frameScheduler.lock);
|
||||||
l_frameScheduler.phaseError = 0;
|
l_frameScheduler.phaseError = 0;
|
||||||
l_frameScheduler.feedbackFrameSerial = 0;
|
l_frameScheduler.feedbackFrameSerial = 0;
|
||||||
@@ -324,7 +338,7 @@ void frameScheduler_update(void)
|
|||||||
|
|
||||||
LG_TransportFrameScheduleFlags flags =
|
LG_TransportFrameScheduleFlags flags =
|
||||||
LG_TRANSPORT_FRAME_SCHEDULE_ACTIVE;
|
LG_TRANSPORT_FRAME_SCHEDULE_ACTIVE;
|
||||||
if (reset)
|
if (l_frameScheduler.resetPending)
|
||||||
flags |= LG_TRANSPORT_FRAME_SCHEDULE_RESET;
|
flags |= LG_TRANSPORT_FRAME_SCHEDULE_RESET;
|
||||||
if (l_frameScheduler.immediatePending)
|
if (l_frameScheduler.immediatePending)
|
||||||
flags |= LG_TRANSPORT_FRAME_SCHEDULE_IMMEDIATE;
|
flags |= LG_TRANSPORT_FRAME_SCHEDULE_IMMEDIATE;
|
||||||
|
|||||||
Reference in New Issue
Block a user