barbieri pushed a commit to branch master.

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

commit 08c38713ced3baef854ffe13478bf60ae2dbcd59
Author: Gustavo Sverzut Barbieri <barbi...@profusion.mobi>
Date:   Mon Dec 19 20:31:11 2016 -0200

    do not emit events from efl_io_closer_close() on destructor.
    
    On destructor we're not supposed to emit events, I even thought that
    would be implicit, but it's not. If we do, for example an event
    handler that would 'efl_del()' on "EFL_IO_CLOSER_EVENT_CLOSED" would
    trigger too-many unrefs.
---
 src/lib/ecore/efl_io_copier.c                 | 6 +++++-
 src/lib/ecore/efl_io_file.c                   | 6 +++++-
 src/lib/ecore_con/efl_net_dialer_http.c       | 8 +++++++-
 src/lib/ecore_con/efl_net_dialer_ssl.c        | 6 +++++-
 src/lib/ecore_con/efl_net_dialer_tcp.c        | 6 +++++-
 src/lib/ecore_con/efl_net_dialer_udp.c        | 6 +++++-
 src/lib/ecore_con/efl_net_dialer_unix.c       | 6 +++++-
 src/lib/ecore_con/efl_net_server_udp_client.c | 6 +++++-
 src/lib/ecore_con/efl_net_socket_fd.c         | 6 +++++-
 src/lib/ecore_con/efl_net_socket_ssl.c        | 6 +++++-
 src/lib/efl/interfaces/efl_io_buffer.c        | 6 +++++-
 src/lib/efl/interfaces/efl_io_queue.c         | 6 +++++-
 12 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/src/lib/ecore/efl_io_copier.c b/src/lib/ecore/efl_io_copier.c
index 39cbeab..e02176f 100644
--- a/src/lib/ecore/efl_io_copier.c
+++ b/src/lib/ecore/efl_io_copier.c
@@ -849,7 +849,11 @@ _efl_io_copier_efl_object_destructor(Eo *o, 
Efl_Io_Copier_Data *pd)
 
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_io_copier_source_set(o, NULL);
    efl_io_copier_destination_set(o, NULL);
diff --git a/src/lib/ecore/efl_io_file.c b/src/lib/ecore/efl_io_file.c
index 0e9320c..ab0e20f 100644
--- a/src/lib/ecore/efl_io_file.c
+++ b/src/lib/ecore/efl_io_file.c
@@ -127,7 +127,11 @@ _efl_io_file_efl_object_destructor(Eo *o, Efl_Io_File_Data 
*pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_destructor(efl_super(o, MY_CLASS));
 
diff --git a/src/lib/ecore_con/efl_net_dialer_http.c 
b/src/lib/ecore_con/efl_net_dialer_http.c
index 135051d..b4d39e4 100644
--- a/src/lib/ecore_con/efl_net_dialer_http.c
+++ b/src/lib/ecore_con/efl_net_dialer_http.c
@@ -1143,11 +1143,17 @@ _efl_net_dialer_http_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Http_Data *pd)
    else if (pd->pending_close)
      {
         efl_future_cancel(pd->pending_close);
+        efl_event_freeze(o);
         efl_io_closer_close(o);
+        efl_event_thaw(o);
      }
    else if (efl_io_closer_close_on_destructor_get(o) &&
             (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_net_dialer_http_response_headers_clear(o);
 
diff --git a/src/lib/ecore_con/efl_net_dialer_ssl.c 
b/src/lib/ecore_con/efl_net_dialer_ssl.c
index 453486b..d873434 100644
--- a/src/lib/ecore_con/efl_net_dialer_ssl.c
+++ b/src/lib/ecore_con/efl_net_dialer_ssl.c
@@ -98,7 +98,11 @@ _efl_net_dialer_ssl_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Ssl_Data *pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    if (pd->sock)
      {
diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.c 
b/src/lib/ecore_con/efl_net_dialer_tcp.c
index 70aa421..8806cc3 100644
--- a/src/lib/ecore_con/efl_net_dialer_tcp.c
+++ b/src/lib/ecore_con/efl_net_dialer_tcp.c
@@ -57,7 +57,11 @@ _efl_net_dialer_tcp_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Tcp_Data *pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    if (pd->connect.thread)
      {
diff --git a/src/lib/ecore_con/efl_net_dialer_udp.c 
b/src/lib/ecore_con/efl_net_dialer_udp.c
index e493ec9..c85c770 100644
--- a/src/lib/ecore_con/efl_net_dialer_udp.c
+++ b/src/lib/ecore_con/efl_net_dialer_udp.c
@@ -58,7 +58,11 @@ _efl_net_dialer_udp_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Udp_Data *pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    if (pd->resolver.thread)
      {
diff --git a/src/lib/ecore_con/efl_net_dialer_unix.c 
b/src/lib/ecore_con/efl_net_dialer_unix.c
index 295d1b1..0493ff2 100644
--- a/src/lib/ecore_con/efl_net_dialer_unix.c
+++ b/src/lib/ecore_con/efl_net_dialer_unix.c
@@ -48,7 +48,11 @@ _efl_net_dialer_unix_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Unix_Data *pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    if (pd->connect.thread)
      {
diff --git a/src/lib/ecore_con/efl_net_server_udp_client.c 
b/src/lib/ecore_con/efl_net_server_udp_client.c
index 20cec66..e9ce54c 100644
--- a/src/lib/ecore_con/efl_net_server_udp_client.c
+++ b/src/lib/ecore_con/efl_net_server_udp_client.c
@@ -75,7 +75,11 @@ _efl_net_server_udp_client_efl_object_destructor(Eo *o, 
Efl_Net_Server_Udp_Clien
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_destructor(efl_super(o, MY_CLASS));
 
diff --git a/src/lib/ecore_con/efl_net_socket_fd.c 
b/src/lib/ecore_con/efl_net_socket_fd.c
index e79fd47..e0e05d6 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.c
+++ b/src/lib/ecore_con/efl_net_socket_fd.c
@@ -91,7 +91,11 @@ _efl_net_socket_fd_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Fd_Data *pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_destructor(efl_super(o, MY_CLASS));
 
diff --git a/src/lib/ecore_con/efl_net_socket_ssl.c 
b/src/lib/ecore_con/efl_net_socket_ssl.c
index 63252b9..77f9620 100644
--- a/src/lib/ecore_con/efl_net_socket_ssl.c
+++ b/src/lib/ecore_con/efl_net_socket_ssl.c
@@ -434,7 +434,11 @@ _efl_net_socket_ssl_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Ssl_Data *pd)
 {
    if (efl_io_closer_close_on_destructor_get(o) &&
        (!efl_io_closer_closed_get(o)))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_destructor(efl_super(o, MY_CLASS));
 
diff --git a/src/lib/efl/interfaces/efl_io_buffer.c 
b/src/lib/efl/interfaces/efl_io_buffer.c
index 88bdc49..e22bfa3 100644
--- a/src/lib/efl/interfaces/efl_io_buffer.c
+++ b/src/lib/efl/interfaces/efl_io_buffer.c
@@ -166,7 +166,11 @@ EOLIAN static void
 _efl_io_buffer_efl_object_destructor(Eo *o, Efl_Io_Buffer_Data *pd)
 {
    if (!efl_io_closer_closed_get(o))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_destructor(efl_super(o, MY_CLASS));
 
diff --git a/src/lib/efl/interfaces/efl_io_queue.c 
b/src/lib/efl/interfaces/efl_io_queue.c
index 9458f28..80bc063 100644
--- a/src/lib/efl/interfaces/efl_io_queue.c
+++ b/src/lib/efl/interfaces/efl_io_queue.c
@@ -252,7 +252,11 @@ EOLIAN static void
 _efl_io_queue_efl_object_destructor(Eo *o, Efl_Io_Queue_Data *pd)
 {
    if (!efl_io_closer_closed_get(o))
-     efl_io_closer_close(o);
+     {
+        efl_event_freeze(o);
+        efl_io_closer_close(o);
+        efl_event_thaw(o);
+     }
 
    efl_destructor(efl_super(o, MY_CLASS));
 

-- 


Reply via email to