rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=4502f11e7ec1e02ab8e0b22bccd609be8ec8513c

commit 4502f11e7ec1e02ab8e0b22bccd609be8ec8513c
Author: Vyacheslav Reutskiy <v.reuts...@samsung.com>
Date:   Thu Jul 30 10:25:28 2015 +0300

    Project manager: remake the print message
    
    Delete the member message from Project_Thread and create a internal
    structure, what allow print the message to user output fully
    asynchronously.
    
    Change-Id: I9738bb9236c7637ec54460fa2f100bba3b1a501b
---
 src/bin/project_manager/project_manager.c | 38 ++++++++++++++-----------------
 src/bin/project_manager/project_manager.h |  2 --
 2 files changed, 17 insertions(+), 23 deletions(-)

diff --git a/src/bin/project_manager/project_manager.c 
b/src/bin/project_manager/project_manager.c
index 62fd4a4..ecb14d9 100644
--- a/src/bin/project_manager/project_manager.c
+++ b/src/bin/project_manager/project_manager.c
@@ -49,6 +49,12 @@ const char *top_levels[] = { "collections",
                              "sounds",
                              "group",
                              NULL};
+typedef struct
+{
+   Eina_Stringshare *str;
+   PM_Project_Progress_Cb func_print;
+   void *data;
+} Progress_Message;
 
 #define WORKER_CREATE(FUNC_PROGRESS, FUNC_END, DATA, PROJECT, \
                       NAME, PATH, EDJ, EDC, BUILD_OPTIONS) \
@@ -75,8 +81,6 @@ const char *top_levels[] = { "collections",
    eina_stringshare_del(worker->edj); \
    eina_stringshare_del(worker->edc); \
    eina_stringshare_del(worker->build_options); \
-   if (worker->message) \
-     eina_stringshare_del(worker->message); \
    free(worker); \
    worker = NULL; \
 }
@@ -89,10 +93,11 @@ const char *top_levels[] = { "collections",
 { \
    if (worker->func_progress) \
       { \
-         if (worker->message) \
-           eina_stringshare_del(worker->message); \
-         worker->message = eina_stringshare_printf(FMT, ## __VA_ARGS__); \
-         ecore_main_loop_thread_safe_call_async(_progress_send, worker); \
+         Progress_Message *message = mem_malloc(sizeof(Progress_Message)); \
+         message->str = eina_stringshare_printf(FMT, ## __VA_ARGS__); \
+         message->func_print = worker->func_progress; \
+         message->data = worker->data; \
+         ecore_main_loop_thread_safe_call_async(_progress_send, message); \
       } \
 }
 
@@ -179,23 +184,14 @@ _pm_project_descriptor_data_write(const char *path, 
Project *project)
 static void
 _progress_send(void *data)
 {
-   Project_Thread *worker;
-   PM_Project_Progress_Cb func;
-   Eina_Stringshare *message;
-   void *udata;
-
-   worker = (Project_Thread *)data;
+   Progress_Message *message;
 
-   assert(worker != NULL);
+   message = (Progress_Message *)data;
+   assert(message != NULL);
 
-   /** Copy the links to callback and meesage, to fast release worker 
resource. */
-   WORKER_LOCK_TAKE;
-      func = worker->func_progress;
-      message = eina_stringshare_ref(worker->message);
-      udata = worker->data;
-   WORKER_LOCK_RELEASE;
-   if (func) func(udata, message);
-   eina_stringshare_del(message);
+   message->func_print(message->data, message->str);
+   eina_stringshare_del(message->str);
+   free(message);
 }
 
 static void
diff --git a/src/bin/project_manager/project_manager.h 
b/src/bin/project_manager/project_manager.h
index 82f15a7..275cd34 100644
--- a/src/bin/project_manager/project_manager.h
+++ b/src/bin/project_manager/project_manager.h
@@ -227,8 +227,6 @@ struct _Project_Thread
    const char *edc;
    /** edje_cc options. Used for 'new project' and 'import from edc'. */
    const char *build_options;
-   /** Message string */
-   Eina_Stringshare *message;
    /** Mutex, I say no more then. */
    Eina_Lock mutex;
 };

-- 


Reply via email to