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);

-- 


Reply via email to