rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=2b55e6e57daad79902b7e69bee67885af5a2c94b
commit 2b55e6e57daad79902b7e69bee67885af5a2c94b Author: Mykyta Biliavskyi <[email protected]> Date: Tue Sep 27 18:06:45 2016 +0300 Project manager2: add correct close project in unexpected flow. Modify exporter app for return error code on failure. Process this code in project manager2 and correct close project structure. @svace WGID 23251 --- src/bin/exporter/eflete_exporter.c | 5 +- src/bin/project_manager/project_manager2.c | 87 +++++++++++++++++++++--------- 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/src/bin/exporter/eflete_exporter.c b/src/bin/exporter/eflete_exporter.c index 8af2266..4e2cf0e 100644 --- a/src/bin/exporter/eflete_exporter.c +++ b/src/bin/exporter/eflete_exporter.c @@ -40,6 +40,8 @@ static Ecore_Job *sounds_job = NULL; static Ecore_Job *fonts_job = NULL; static Ecore_Job *source_job = NULL; +static int exit_status = EXIT_SUCCESS; + static const Ecore_Getopt options = { PACKAGE_NAME, "%prog [OPTION]... FILE" @@ -102,6 +104,7 @@ _terminate(void) ecore_file_recursive_rm(buf); ecore_job_del(source_job); + exit_status = EXIT_FAILURE; ecore_main_loop_quit(); } @@ -551,5 +554,5 @@ exit: ecore_shutdown(); eina_shutdown(); - return EXIT_SUCCESS; + return exit_status; } diff --git a/src/bin/project_manager/project_manager2.c b/src/bin/project_manager/project_manager2.c index 0b0dc85..e97a4c5 100644 --- a/src/bin/project_manager/project_manager2.c +++ b/src/bin/project_manager/project_manager2.c @@ -531,6 +531,14 @@ _exporter_finish_handler(void *data, { Project_Process_Data *ppd = data; Project *project = (Project *) ppd->project; + Ecore_Exe_Event_Del *exporter_exit = (Ecore_Exe_Event_Del *)event_info; + + if (exporter_exit->exit_code != 0) + { + ppd->result = PM_PROJECT_ERROR; + _end_send(ppd); + return ECORE_CALLBACK_DONE; + } resource_manager_init(project); @@ -539,6 +547,45 @@ _exporter_finish_handler(void *data, return ECORE_CALLBACK_DONE; } +static void +_project_close_internal(Project *project) +{ + if (project->global_object) + evas_object_del(project->global_object); + + if (project->ecore_evas) + ecore_evas_free(project->ecore_evas); + + if (project->mmap_file) + eina_file_close(project->mmap_file); + + if (project->name) + eina_stringshare_del(project->name); + + if (project->dev) + eina_stringshare_del(project->dev); + if (project->develop_path) + eina_stringshare_del(project->develop_path); + if (project->pro_path) + eina_stringshare_del(project->pro_path); + + +#ifdef HAVE_ENVENTOR + if (enventor_object_project_unload(project)) + free(project->enventor); +#endif /* HAVE_ENVENTOR */ + + if (project->ef) + eet_close(project->ef); +#ifdef _WIN32 + if (project->pro_fd != INVALID_HANDLE_VALUE) + CloseHandle(project->pro_fd); +#else + if (project->pro_fd != -1) + close(project->pro_fd); +#endif +} + static Eina_Bool _project_open_internal(Project_Process_Data *ppd) { @@ -564,8 +611,11 @@ _project_open_internal(Project_Process_Data *ppd) ERR("Project file already locked by another application"); #ifdef _WIN32 CloseHandle(fd); -#endif /* */ - return false; +#else + if (pro_fd != -1) + close(pro_fd); +#endif + return false; } ef = eet_open(ppd->path, EET_FILE_MODE_READ_WRITE); @@ -704,6 +754,7 @@ pm_project_open(const char *path, if (!_project_open_internal(ppd)) { + _project_close_internal(ppd->project); _project_process_data_cleanup(ppd); ret = false; } @@ -733,7 +784,10 @@ _edje_pick_finish_handler(void *data, return ECORE_CALLBACK_CANCEL; if (!_project_open_internal(ppd)) - return ECORE_CALLBACK_CANCEL; + { + _project_close_internal(ppd->project); + return ECORE_CALLBACK_CANCEL; + } else return ECORE_CALLBACK_DONE; } @@ -887,6 +941,8 @@ pm_project_import_edj(const char *name, if (!_project_import_edj(ppd)) { _project_process_data_cleanup(ppd); + _project_close_internal(ppd->project); + ecore_file_recursive_rm(spath); ret = false; } @@ -980,6 +1036,8 @@ pm_project_import_edc(const char *name, if (!_project_import_edc(ppd)) { _project_process_data_cleanup(ppd); + _project_close_internal(ppd->project); + ecore_file_recursive_rm(spath); ret = false; } free(spath); @@ -1008,30 +1066,9 @@ pm_project_close(Project *project) "%s/fonts", project->develop_path); ecore_file_recursive_rm(buf); - evas_object_del(project->global_object); - ecore_evas_free(project->ecore_evas); - - eina_file_close(project->mmap_file); ecore_file_unlink(project->dev); + _project_close_internal(project); - eina_stringshare_del(project->name); - eina_stringshare_del(project->dev); - eina_stringshare_del(project->develop_path); - eina_stringshare_del(project->pro_path); - -#ifdef HAVE_ENVENTOR - if (enventor_object_project_unload(project)) - free(project->enventor); -#endif /* HAVE_ENVENTOR */ - - eet_close(project->ef); -#ifdef _WIN32 - if (project->pro_fd != INVALID_HANDLE_VALUE) - CloseHandle(project->pro_fd); -#else - if (project->pro_fd != -1) - close(project->pro_fd); -#endif resource_manager_shutdown(project); evas_object_smart_callback_call(ap.win, SIGNAL_PROJECT_CLOSED, NULL); --
