From 0222cbf19bc3276e791d4d9aed9b16909395ae16 Mon Sep 17 00:00:00 2001 From: cottongin Date: Mon, 16 Feb 2026 13:24:48 -0500 Subject: [PATCH] mod: convert remaining manual render locks to RAII RenderLock Replace xSemaphoreTake/Give(renderingMutex) with scoped RenderLock in EpubReaderActivity popup rendering (bookmark added/removed, dictionary cache deleted). Co-authored-by: Cursor --- src/activities/reader/EpubReaderActivity.cpp | 36 +++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index f867dc80..b74d147c 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -477,10 +477,11 @@ void EpubReaderActivity::onReaderMenuConfirm(EpubReaderMenuActivity::MenuAction } BookmarkStore::addBookmark(epub->getCachePath(), currentSpineIndex, page, snippet); - xSemaphoreTake(renderingMutex, portMAX_DELAY); - GUI.drawPopup(renderer, tr(STR_BOOKMARK_ADDED)); - renderer.displayBuffer(HalDisplay::FAST_REFRESH); - xSemaphoreGive(renderingMutex); + { + RenderLock lock(*this); + GUI.drawPopup(renderer, tr(STR_BOOKMARK_ADDED)); + renderer.displayBuffer(HalDisplay::FAST_REFRESH); + } vTaskDelay(750 / portTICK_PERIOD_MS); // Exit the menu and return to reading — the bookmark indicator will show on re-render, // and next menu open will reflect the updated state. @@ -492,10 +493,11 @@ void EpubReaderActivity::onReaderMenuConfirm(EpubReaderMenuActivity::MenuAction case EpubReaderMenuActivity::MenuAction::REMOVE_BOOKMARK: { const int page = section ? section->currentPage : 0; BookmarkStore::removeBookmark(epub->getCachePath(), currentSpineIndex, page); - xSemaphoreTake(renderingMutex, portMAX_DELAY); - GUI.drawPopup(renderer, tr(STR_BOOKMARK_REMOVED)); - renderer.displayBuffer(HalDisplay::FAST_REFRESH); - xSemaphoreGive(renderingMutex); + { + RenderLock lock(*this); + GUI.drawPopup(renderer, tr(STR_BOOKMARK_REMOVED)); + renderer.displayBuffer(HalDisplay::FAST_REFRESH); + } vTaskDelay(750 / portTICK_PERIOD_MS); exitActivity(); pagesUntilFullRefresh = 1; @@ -564,15 +566,17 @@ void EpubReaderActivity::onReaderMenuConfirm(EpubReaderMenuActivity::MenuAction case EpubReaderMenuActivity::MenuAction::DELETE_DICT_CACHE: { if (Dictionary::cacheExists()) { Dictionary::deleteCache(); - xSemaphoreTake(renderingMutex, portMAX_DELAY); - GUI.drawPopup(renderer, tr(STR_DICT_CACHE_DELETED)); - renderer.displayBuffer(HalDisplay::FAST_REFRESH); - xSemaphoreGive(renderingMutex); + { + RenderLock lock(*this); + GUI.drawPopup(renderer, tr(STR_DICT_CACHE_DELETED)); + renderer.displayBuffer(HalDisplay::FAST_REFRESH); + } } else { - xSemaphoreTake(renderingMutex, portMAX_DELAY); - GUI.drawPopup(renderer, tr(STR_NO_CACHE_TO_DELETE)); - renderer.displayBuffer(HalDisplay::FAST_REFRESH); - xSemaphoreGive(renderingMutex); + { + RenderLock lock(*this); + GUI.drawPopup(renderer, tr(STR_NO_CACHE_TO_DELETE)); + renderer.displayBuffer(HalDisplay::FAST_REFRESH); + } } vTaskDelay(1500 / portTICK_PERIOD_MS); break;