cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b2ee3ad74872bcccaac00b718175f7dcedbd1589

commit b2ee3ad74872bcccaac00b718175f7dcedbd1589
Author: Hosang Kim <hosang12....@samsung.com>
Date:   Thu Oct 24 07:27:37 2019 +0000

    efl_message: add pending queue for filtering message.
    
    Sometimes message is appended when message queue is walking.
    In this case, newly added messages are not filtered.
    So I add message pending queue for filtering message.
    
    Reviewed-by: Cedric BAIL <cedric.b...@free.fr>
    Differential Revision: https://phab.enlightenment.org/D10459
---
 src/lib/ecore/ecore_private.h            |  1 +
 src/lib/ecore/efl_loop.c                 |  8 ++++++++
 src/lib/ecore/efl_loop_message_handler.c | 12 ++++++++++--
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/lib/ecore/ecore_private.h b/src/lib/ecore/ecore_private.h
index de3b47b60c..f56cbae30a 100644
--- a/src/lib/ecore/ecore_private.h
+++ b/src/lib/ecore/ecore_private.h
@@ -147,6 +147,7 @@ struct _Efl_Loop_Data
    Eina_List           *thread_children;
 
    Eina_Inlist         *message_queue;
+   Eina_Inlist         *message_pending_queue;
    unsigned int         message_walking;
 
    unsigned int         throttle;
diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c
index e40dbef3f0..9a36d74658 100644
--- a/src/lib/ecore/efl_loop.c
+++ b/src/lib/ecore/efl_loop.c
@@ -621,6 +621,14 @@ _efl_loop_message_process(Eo *obj, Efl_Loop_Data *pd)
                }
              else free(msg);
           }
+
+        while (pd->message_pending_queue)
+          {
+             msg = (Message *)pd->message_pending_queue;
+             pd->message_pending_queue = 
eina_inlist_remove(pd->message_pending_queue,
+                                                            
pd->message_pending_queue);
+             pd->message_queue = eina_inlist_append(pd->message_queue, 
EINA_INLIST_GET(msg));
+          }
      }
    return EINA_TRUE;
 }
diff --git a/src/lib/ecore/efl_loop_message_handler.c 
b/src/lib/ecore/efl_loop_message_handler.c
index 05ecdbcab2..e243c1713e 100644
--- a/src/lib/ecore/efl_loop_message_handler.c
+++ b/src/lib/ecore/efl_loop_message_handler.c
@@ -54,8 +54,16 @@ _efl_loop_message_handler_message_send(Eo *obj, 
Efl_Loop_Message_Handler_Data *p
      {
         msg->handler = obj;
         msg->message = message;
-        pd->loop_data->message_queue = eina_inlist_append
-          (pd->loop_data->message_queue, EINA_INLIST_GET(msg));
+        if (pd->loop_data->message_walking > 0)
+          {
+             pd->loop_data->message_pending_queue = eina_inlist_append
+                (pd->loop_data->message_pending_queue, EINA_INLIST_GET(msg));
+          }
+        else
+          {
+             pd->loop_data->message_queue = eina_inlist_append
+                (pd->loop_data->message_queue, EINA_INLIST_GET(msg));
+          }
         _efl_loop_message_send_info_set(message, EINA_INLIST_GET(msg),
                                        pd->loop, pd->loop_data);
         return;

-- 


Reply via email to