mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 20:49:49 +04:00
[FL-3775] Archive: fix condition race on exit (#3659)
* Archive: fix condition race on exit * Format sources and remove debug logging --------- Co-authored-by: hedger <hedger@users.noreply.github.com>
This commit is contained in:
@@ -16,6 +16,7 @@ ArchiveApp* archive_alloc(void) {
|
|||||||
ArchiveApp* archive = malloc(sizeof(ArchiveApp));
|
ArchiveApp* archive = malloc(sizeof(ArchiveApp));
|
||||||
|
|
||||||
archive->gui = furi_record_open(RECORD_GUI);
|
archive->gui = furi_record_open(RECORD_GUI);
|
||||||
|
archive->loader = furi_record_open(RECORD_LOADER);
|
||||||
archive->text_input = text_input_alloc();
|
archive->text_input = text_input_alloc();
|
||||||
archive->fav_move_str = furi_string_alloc();
|
archive->fav_move_str = furi_string_alloc();
|
||||||
|
|
||||||
@@ -61,6 +62,8 @@ void archive_free(ArchiveApp* archive) {
|
|||||||
|
|
||||||
text_input_free(archive->text_input);
|
text_input_free(archive->text_input);
|
||||||
|
|
||||||
|
furi_record_close(RECORD_LOADER);
|
||||||
|
archive->loader = NULL;
|
||||||
furi_record_close(RECORD_GUI);
|
furi_record_close(RECORD_GUI);
|
||||||
archive->gui = NULL;
|
archive->gui = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ typedef enum {
|
|||||||
|
|
||||||
struct ArchiveApp {
|
struct ArchiveApp {
|
||||||
Gui* gui;
|
Gui* gui;
|
||||||
|
Loader* loader;
|
||||||
ViewDispatcher* view_dispatcher;
|
ViewDispatcher* view_dispatcher;
|
||||||
SceneManager* scene_manager;
|
SceneManager* scene_manager;
|
||||||
ArchiveBrowserView* browser;
|
ArchiveBrowserView* browser;
|
||||||
|
|||||||
@@ -86,10 +86,8 @@ void archive_scene_browser_on_enter(void* context) {
|
|||||||
archive_update_focus(browser, archive->text_store);
|
archive_update_focus(browser, archive->text_store);
|
||||||
view_dispatcher_switch_to_view(archive->view_dispatcher, ArchiveViewBrowser);
|
view_dispatcher_switch_to_view(archive->view_dispatcher, ArchiveViewBrowser);
|
||||||
|
|
||||||
Loader* loader = furi_record_open(RECORD_LOADER);
|
archive->loader_stop_subscription = furi_pubsub_subscribe(
|
||||||
archive->loader_stop_subscription =
|
loader_get_pubsub(archive->loader), archive_loader_callback, archive);
|
||||||
furi_pubsub_subscribe(loader_get_pubsub(loader), archive_loader_callback, archive);
|
|
||||||
furi_record_close(RECORD_LOADER);
|
|
||||||
|
|
||||||
uint32_t state = scene_manager_get_scene_state(archive->scene_manager, ArchiveAppSceneBrowser);
|
uint32_t state = scene_manager_get_scene_state(archive->scene_manager, ArchiveAppSceneBrowser);
|
||||||
|
|
||||||
@@ -213,10 +211,11 @@ bool archive_scene_browser_on_event(void* context, SceneManagerEvent event) {
|
|||||||
if(!archive_is_home(browser)) {
|
if(!archive_is_home(browser)) {
|
||||||
archive_leave_dir(browser);
|
archive_leave_dir(browser);
|
||||||
} else {
|
} else {
|
||||||
Loader* loader = furi_record_open(RECORD_LOADER);
|
if(archive->loader_stop_subscription) {
|
||||||
furi_pubsub_unsubscribe(
|
furi_pubsub_unsubscribe(
|
||||||
loader_get_pubsub(loader), archive->loader_stop_subscription);
|
loader_get_pubsub(archive->loader), archive->loader_stop_subscription);
|
||||||
furi_record_close(RECORD_LOADER);
|
archive->loader_stop_subscription = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
view_dispatcher_stop(archive->view_dispatcher);
|
view_dispatcher_stop(archive->view_dispatcher);
|
||||||
}
|
}
|
||||||
@@ -232,8 +231,9 @@ bool archive_scene_browser_on_event(void* context, SceneManagerEvent event) {
|
|||||||
|
|
||||||
void archive_scene_browser_on_exit(void* context) {
|
void archive_scene_browser_on_exit(void* context) {
|
||||||
ArchiveApp* archive = (ArchiveApp*)context;
|
ArchiveApp* archive = (ArchiveApp*)context;
|
||||||
|
if(archive->loader_stop_subscription) {
|
||||||
Loader* loader = furi_record_open(RECORD_LOADER);
|
furi_pubsub_unsubscribe(
|
||||||
furi_pubsub_unsubscribe(loader_get_pubsub(loader), archive->loader_stop_subscription);
|
loader_get_pubsub(archive->loader), archive->loader_stop_subscription);
|
||||||
furi_record_close(RECORD_LOADER);
|
archive->loader_stop_subscription = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user