diff --git a/src/activities/home/HomeActivity.h b/src/activities/home/HomeActivity.h index 7d66caeb..4e286d71 100644 --- a/src/activities/home/HomeActivity.h +++ b/src/activities/home/HomeActivity.h @@ -44,4 +44,5 @@ class HomeActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; + bool preventAutoSleep() override { return !firstRenderDone || recentsLoading || !recentsLoaded; } }; diff --git a/src/main.cpp b/src/main.cpp index faa059ba..47eb8142 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -135,6 +135,10 @@ void enterDeepSleep() { activityManager.goToSleep(); + // Keep the render mutex until the CPU enters deep sleep so any previously queued + // render task cannot race the synchronous sleep-screen transition. + RenderLock renderLock; + display.deepSleep(); LOG_DBG("MAIN", "Entering deep sleep (powerBtn isPressed=%d, rawPin=%d)", gpio.isPressed(HalGPIO::BTN_POWER), digitalRead(InputManager::POWER_BUTTON_PIN) == LOW);