Просмотр исходного кода

Memory Management fix by Willy-JL

David Lee 1 год назад
Родитель
Сommit
e5d8376074
4 измененных файлов с 27 добавлено и 31 удалено
  1. 23 25
      color_guess.c
  2. 4 2
      helpers/color_guess_storage.c
  3. 0 2
      views/color_guess_play.c
  4. 0 2
      views/color_guess_startscreen.c

+ 23 - 25
color_guess.c

@@ -34,8 +34,7 @@ ColorGuess* color_guess_app_alloc() {
     // Load configs
     color_guess_read_settings(app);
 
-    NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
-    notification_message(notification, &sequence_display_backlight_on);
+    notification_message(app->notification, &sequence_display_backlight_on);
 
     //Scene additions
     app->view_dispatcher = view_dispatcher_alloc();
@@ -49,30 +48,32 @@ ColorGuess* color_guess_app_alloc() {
         app->view_dispatcher, color_guess_tick_event_callback, 100);
     view_dispatcher_set_custom_event_callback(
         app->view_dispatcher, color_guess_custom_event_callback);
-    app->submenu = submenu_alloc();
-
-    view_dispatcher_add_view(
-        app->view_dispatcher, ColorGuessViewIdMenu, submenu_get_view(app->submenu));
-    app->variable_item_list = variable_item_list_alloc();
-    view_dispatcher_add_view(
-        app->view_dispatcher,
-        ColorGuessViewIdSettings,
-        variable_item_list_get_view(app->variable_item_list));
+    
     app->color_guess_startscreen = color_guess_startscreen_alloc();
     view_dispatcher_add_view(
         app->view_dispatcher,
         ColorGuessViewIdStartscreen,
         color_guess_startscreen_get_view(app->color_guess_startscreen));
+    app->submenu = submenu_alloc();
+    view_dispatcher_add_view(
+        app->view_dispatcher, ColorGuessViewIdMenu, submenu_get_view(app->submenu));
+    app->color_guess_play = color_guess_play_alloc();
+    view_dispatcher_add_view(
+        app->view_dispatcher,
+        ColorGuessViewIdPlay,
+        color_guess_play_get_view(app->color_guess_play));
     app->color_guess_color_set = color_guess_color_set_alloc();
     view_dispatcher_add_view(
         app->view_dispatcher,
         ColorGuessViewIdColorSet,
         color_guess_color_set_get_view(app->color_guess_color_set));
-    app->color_guess_play = color_guess_play_alloc();
+    app->variable_item_list = variable_item_list_alloc();
     view_dispatcher_add_view(
         app->view_dispatcher,
-        ColorGuessViewIdPlay,
-        color_guess_play_get_view(app->color_guess_play));
+        ColorGuessViewIdSettings,
+        variable_item_list_get_view(app->variable_item_list));
+    
+    
 
     //End Scene Additions
 
@@ -86,16 +87,19 @@ void color_guess_app_free(ColorGuess* app) {
     scene_manager_free(app->scene_manager);
 
     // View Dispatcher
-    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdMenu);
     view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdStartscreen);
-    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdColorSet);
+    color_guess_startscreen_free(app->color_guess_startscreen);
+    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdMenu);
+    submenu_free(app->submenu);
     view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdPlay);
+    color_guess_play_free(app->color_guess_play);
+    view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdColorSet);
+    color_guess_color_set_free(app->color_guess_color_set);    
     view_dispatcher_remove_view(app->view_dispatcher, ColorGuessViewIdSettings);
-    submenu_free(app->submenu);
-
     view_dispatcher_free(app->view_dispatcher);
 
-    // GUI
+    // Records
+    furi_record_close(RECORD_NOTIFICATION);
     furi_record_close(RECORD_GUI);
 
     app->view_port = NULL;
@@ -113,12 +117,6 @@ int32_t color_guess_app(void* p) {
         return 255;
     }
 
-    /* //This exits if run in RM FW
-    if(!furi_hal_region_is_provisioned()) {
-        color_guess_app_free(app);
-        return 1;
-    }*/
-
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
     scene_manager_next_scene(app->scene_manager, ColorGuessSceneStartscreen);

+ 4 - 2
helpers/color_guess_storage.c

@@ -85,6 +85,7 @@ void color_guess_read_settings(void* context) {
         FURI_LOG_E(TAG, "Cannot open file %s", COLOR_GUESS_SETTINGS_SAVE_PATH);
         color_guess_close_config_file(fff_file);
         color_guess_close_storage();
+        furi_string_free(temp_str);
         return;
     }
 
@@ -92,6 +93,7 @@ void color_guess_read_settings(void* context) {
         FURI_LOG_E(TAG, "Missing Header Data");
         color_guess_close_config_file(fff_file);
         color_guess_close_storage();
+        furi_string_free(temp_str);
         return;
     }
 
@@ -99,8 +101,10 @@ void color_guess_read_settings(void* context) {
         FURI_LOG_I(TAG, "old config version, will be removed.");
         color_guess_close_config_file(fff_file);
         color_guess_close_storage();
+        furi_string_free(temp_str);
         return;
     }
+    furi_string_free(temp_str);
 
     flipper_format_read_uint32(fff_file, COLOR_GUESS_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
     flipper_format_read_uint32(fff_file, COLOR_GUESS_SETTINGS_KEY_LED, &app->led, 1);
@@ -109,8 +113,6 @@ void color_guess_read_settings(void* context) {
 
     flipper_format_rewind(fff_file);
 
-    furi_string_free(temp_str);
-
     color_guess_close_config_file(fff_file);
     color_guess_close_storage();
 }

+ 0 - 2
views/color_guess_play.c

@@ -330,8 +330,6 @@ ColorGuessPlay* color_guess_play_alloc() {
 void color_guess_play_free(ColorGuessPlay* instance) {
     furi_assert(instance);
 
-    with_view_model(
-        instance->view, ColorGuessPlayModel * model, { free(model); }, true);
     view_free(instance->view);
     free(instance);
 }

+ 0 - 2
views/color_guess_startscreen.c

@@ -115,8 +115,6 @@ ColorGuessStartscreen* color_guess_startscreen_alloc() {
 void color_guess_startscreen_free(ColorGuessStartscreen* instance) {
     furi_assert(instance);
 
-    with_view_model(
-        instance->view, ColorGuessStartscreenModel * model, { UNUSED(model); }, true);
     view_free(instance->view);
     free(instance);
 }