diff --git a/CHANGES b/CHANGES index a39c4fc0e..e96eb89fa 100644 --- a/CHANGES +++ b/CHANGES @@ -128,6 +128,7 @@ Bugfixes: - Qt: Grab focus when game starts (fixes mgba.io/i/804) - Core: Remember to deinit proxy ring FIFO - GBA Savedata: Fix EEPROM writing codepath when savetype is not EEPROM + - Core: Reroot timing list when (de)scheduling Misc: - mGUI: Add SGB border configuration option - mGUI: Add support for different settings types diff --git a/src/core/timing.c b/src/core/timing.c index be63c1029..7059659ea 100644 --- a/src/core/timing.c +++ b/src/core/timing.c @@ -28,6 +28,10 @@ void mTimingSchedule(struct mTiming* timing, struct mTimingEvent* event, int32_t if (nextEvent < *timing->nextEvent) { *timing->nextEvent = nextEvent; } + if (timing->reroot) { + timing->root = timing->reroot; + timing->reroot = NULL; + } struct mTimingEvent** previous = &timing->root; struct mTimingEvent* next = timing->root; unsigned priority = event->priority; @@ -44,6 +48,10 @@ void mTimingSchedule(struct mTiming* timing, struct mTimingEvent* event, int32_t } void mTimingDeschedule(struct mTiming* timing, struct mTimingEvent* event) { + if (timing->reroot) { + timing->root = timing->reroot; + timing->reroot = NULL; + } struct mTimingEvent** previous = &timing->root; struct mTimingEvent* next = timing->root; while (next) {