Skip to content

Commit f316e90

Browse files
committed
Semaphore: Fix possible race.
1 parent 84778c7 commit f316e90

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

right/src/usb_report_updater.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,7 +1122,7 @@ static bool blockedByReportThrottle() {
11221122
// - we are not sending reports until last report is sent
11231123
// - we resend if sent is not confirmed within timeout
11241124
if (!UsbReadyForTransfers()) {
1125-
blockedUntil = MAX(blockedUntil, Timer_GetCurrentTime() + USB_SEMAPHORE_TIMEOUT);
1125+
blockedUntil = MAX(blockedUntil, currentTime + USB_SEMAPHORE_TIMEOUT);
11261126
blocked = true;
11271127
}
11281128

@@ -1145,14 +1145,16 @@ static bool blockedByReportThrottle() {
11451145
blockedUntil = MAX(throttleUntil, blockedUntil);;
11461146
blocked = true;
11471147
}
1148+
11481149
if (blocked) {
11491150
DISABLE_IRQ();
11501151
postponedMasks |= EventScheduler_Vector & EventVector_MainTriggers;
11511152
EventScheduler_Vector = (EventScheduler_Vector & ~EventVector_MainTriggers) | EventVector_KeystrokeDelayPostponing;
11521153
ENABLE_IRQ();
11531154

11541155
// Make sure to wake up postponer so that it can process the events.
1155-
EventScheduler_Reschedule(blockedUntil, EventSchedulerEvent_Postponer, "report throttle");
1156+
// Don't reschedule here - it is unsafe because of races.
1157+
EventScheduler_Schedule(blockedUntil, EventSchedulerEvent_Postponer, "report throttle");
11561158

11571159
justPreprocessInput(true);
11581160
return true;

0 commit comments

Comments
 (0)