cedric pushed a commit to branch master.

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

commit 33fd77e9e43b0fa29cb484b72d910bdf0ecccbc8
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Tue Apr 17 16:17:29 2018 -0700

    ecore: move close_on_destructor to close_on_invalidate as that describe the 
behavior best.
    
    Fix all use to correctly behave on invalidate.
---
 src/examples/ecore/efl_net_server_example.c        |  6 +--
 src/examples/ecore/efl_net_server_simple_example.c |  2 +-
 .../ecore/efl_net_socket_ssl_server_example.c      |  2 +-
 src/lib/ecore/efl_io_buffered_stream.c             | 12 +++---
 src/lib/ecore/efl_io_buffered_stream.eo            |  2 +-
 src/lib/ecore/efl_io_closer_fd.c                   | 10 ++---
 src/lib/ecore/efl_io_closer_fd.eo                  |  2 +-
 src/lib/ecore/efl_io_copier.c                      | 48 ++++++++++++----------
 src/lib/ecore/efl_io_copier.eo                     | 11 ++---
 src/lib/ecore/efl_io_file.c                        |  4 +-
 src/lib/ecore/efl_io_file.eo                       |  2 +-
 src/lib/ecore_con/ecore_con_eet.c                  |  6 +--
 src/lib/ecore_con/ecore_con_legacy.c               | 19 ++++-----
 src/lib/ecore_con/ecore_con_url.c                  |  8 ++--
 src/lib/ecore_con/efl_net_dialer_http.c            | 20 +++++----
 src/lib/ecore_con/efl_net_dialer_http.eo           |  3 +-
 src/lib/ecore_con/efl_net_dialer_simple.c          | 25 +++++++----
 src/lib/ecore_con/efl_net_dialer_simple.eo         |  1 +
 src/lib/ecore_con/efl_net_dialer_ssl.c             | 10 +----
 src/lib/ecore_con/efl_net_dialer_ssl.eo            |  1 -
 src/lib/ecore_con/efl_net_dialer_tcp.c             | 10 ++++-
 src/lib/ecore_con/efl_net_dialer_tcp.eo            |  1 +
 src/lib/ecore_con/efl_net_dialer_udp.c             | 10 ++++-
 src/lib/ecore_con/efl_net_dialer_udp.eo            |  1 +
 src/lib/ecore_con/efl_net_dialer_unix.c            | 10 ++++-
 src/lib/ecore_con/efl_net_dialer_unix.eo           |  1 +
 src/lib/ecore_con/efl_net_dialer_websocket.c       |  8 ++--
 src/lib/ecore_con/efl_net_dialer_websocket.eo      |  2 +-
 src/lib/ecore_con/efl_net_server_simple.c          |  6 +--
 src/lib/ecore_con/efl_net_server_ssl.c             |  2 +-
 src/lib/ecore_con/efl_net_server_tcp.c             |  2 +-
 src/lib/ecore_con/efl_net_server_udp.c             |  2 +-
 src/lib/ecore_con/efl_net_server_udp_client.c      | 20 +++++----
 src/lib/ecore_con/efl_net_server_udp_client.eo     |  3 +-
 src/lib/ecore_con/efl_net_server_unix.c            |  2 +-
 src/lib/ecore_con/efl_net_server_windows.c         |  2 +-
 src/lib/ecore_con/efl_net_socket_fd.c              | 12 ++++--
 src/lib/ecore_con/efl_net_socket_fd.eo             |  3 +-
 src/lib/ecore_con/efl_net_socket_ssl.c             | 18 +++++---
 src/lib/ecore_con/efl_net_socket_ssl.eo            |  5 ++-
 src/lib/ecore_con/efl_net_socket_windows.c         | 20 +++++----
 src/lib/ecore_con/efl_net_socket_windows.eo        |  2 +-
 src/lib/ecore_file/ecore_file_download.c           |  4 +-
 src/lib/ecore_ipc/ecore_ipc.c                      | 10 ++---
 src/lib/efl/interfaces/efl_io_buffer.c             |  4 +-
 src/lib/efl/interfaces/efl_io_buffer.eo            |  2 +-
 src/lib/efl/interfaces/efl_io_closer.eo            | 10 ++---
 src/lib/efl/interfaces/efl_io_queue.c              |  4 +-
 src/lib/efl/interfaces/efl_io_queue.eo             |  2 +-
 src/lib/elementary/efl_ui_image.c                  |  4 +-
 src/lib/elementary/efl_ui_image_zoomable.c         |  4 +-
 src/tests/ecore_con/ecore_con_test_ecore_con_eet.c |  2 -
 52 files changed, 218 insertions(+), 164 deletions(-)

diff --git a/src/examples/ecore/efl_net_server_example.c 
b/src/examples/ecore/efl_net_server_example.c
index 694ce76418..29a4b96547 100644
--- a/src/examples/ecore/efl_net_server_example.c
+++ b/src/examples/ecore/efl_net_server_example.c
@@ -321,7 +321,7 @@ _server_client_add(void *data EINA_UNUSED, const Efl_Event 
*event)
                                   efl_io_copier_destination_set(efl_added, 
client),
                                   
efl_io_copier_timeout_inactivity_set(efl_added, timeout),
                                   efl_event_callback_array_add(efl_added, 
echo_copier_cbs(), client),
-                                  
efl_io_closer_close_on_destructor_set(efl_added, EINA_TRUE) /* we want to 
auto-close as we have a single copier */
+                                  
efl_io_closer_close_on_invalidate_set(efl_added, EINA_TRUE) /* we want to 
auto-close as we have a single copier */
                                   );
 
         fprintf(stderr, "INFO: using an echo copier=%p for client %s\n",
@@ -362,7 +362,7 @@ _server_client_add(void *data EINA_UNUSED, const Efl_Event 
*event)
                                  efl_io_copier_destination_set(efl_added, 
client),
                                  
efl_io_copier_timeout_inactivity_set(efl_added, timeout),
                                  efl_event_callback_array_add(efl_added, 
send_copier_cbs(), d),
-                                 
efl_io_closer_close_on_destructor_set(efl_added, EINA_FALSE) /* we must wait 
both copiers to finish before we close! */
+                                 
efl_io_closer_close_on_invalidate_set(efl_added, EINA_FALSE) /* we must wait 
both copiers to finish before we close! */
                                  );
 
         fprintf(stderr, "INFO: using sender buffer %p with copier %p for 
client %s\n",
@@ -379,7 +379,7 @@ _server_client_add(void *data EINA_UNUSED, const Efl_Event 
*event)
                                  efl_io_copier_destination_set(efl_added, 
recv_buffer),
                                  
efl_io_copier_timeout_inactivity_set(efl_added, 0.0), /* we'll only set an 
inactivity timeout once the sender is done */
                                  efl_event_callback_array_add(efl_added, 
recv_copier_cbs(), d),
-                                 
efl_io_closer_close_on_destructor_set(efl_added, EINA_FALSE) /* we must wait 
both copiers to finish before we close! */
+                                 
efl_io_closer_close_on_invalidate_set(efl_added, EINA_FALSE) /* we must wait 
both copiers to finish before we close! */
                                  );
 
         fprintf(stderr, "INFO: using receiver buffer %p with copier %p for 
client %s\n",
diff --git a/src/examples/ecore/efl_net_server_simple_example.c 
b/src/examples/ecore/efl_net_server_simple_example.c
index 485dc81476..beb314b2a0 100644
--- a/src/examples/ecore/efl_net_server_simple_example.c
+++ b/src/examples/ecore/efl_net_server_simple_example.c
@@ -176,7 +176,7 @@ _server_client_add(void *data EINA_UNUSED, const Efl_Event 
*event)
                                   efl_io_copier_source_set(efl_added, client),
                                   efl_io_copier_destination_set(efl_added, 
client),
                                   efl_event_callback_array_add(efl_added, 
echo_copier_cbs(), client),
-                                  
efl_io_closer_close_on_destructor_set(efl_added, EINA_TRUE) /* we want to 
auto-close as we have a single copier */
+                                  
efl_io_closer_close_on_invalidate_set(efl_added, EINA_TRUE) /* we want to 
auto-close as we have a single copier */
                                   );
 
         fprintf(stderr, "INFO: using an echo copier=%p for client %s\n",
diff --git a/src/examples/ecore/efl_net_socket_ssl_server_example.c 
b/src/examples/ecore/efl_net_socket_ssl_server_example.c
index 77d435e107..4b9171e41a 100644
--- a/src/examples/ecore/efl_net_socket_ssl_server_example.c
+++ b/src/examples/ecore/efl_net_socket_ssl_server_example.c
@@ -128,7 +128,7 @@ _server_client_add(void *data EINA_UNUSED, const Efl_Event 
*event)
                          efl_io_copier_destination_set(efl_added, ssl),
                          efl_io_copier_timeout_inactivity_set(efl_added, 
timeout),
                          efl_event_callback_array_add(efl_added, 
echo_copier_cbs(), ssl),
-                         efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE) /* we want to auto-close as we have a single copier */
+                         efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE) /* we want to auto-close as we have a single copier */
                          );
 
    fprintf(stderr, "INFO: using an echo copier=%p for ssl %s\n",
diff --git a/src/lib/ecore/efl_io_buffered_stream.c 
b/src/lib/ecore/efl_io_buffered_stream.c
index 3f34aca9fc..3a0921f959 100644
--- a/src/lib/ecore/efl_io_buffered_stream.c
+++ b/src/lib/ecore/efl_io_buffered_stream.c
@@ -227,15 +227,15 @@ 
_efl_io_buffered_stream_efl_io_closer_close_on_exec_set(Eo *o EINA_UNUSED, Efl_I
 }
 
 EOLIAN static Eina_Bool
-_efl_io_buffered_stream_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Io_Buffered_Stream_Data *pd)
+_efl_io_buffered_stream_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Io_Buffered_Stream_Data *pd)
 {
-   return efl_io_closer_close_on_destructor_get(pd->inner_io);
+   return efl_io_closer_close_on_invalidate_get(pd->inner_io);
 }
 
 EOLIAN static void
-_efl_io_buffered_stream_efl_io_closer_close_on_destructor_set(Eo *o 
EINA_UNUSED, Efl_Io_Buffered_Stream_Data *pd, Eina_Bool value)
+_efl_io_buffered_stream_efl_io_closer_close_on_invalidate_set(Eo *o 
EINA_UNUSED, Efl_Io_Buffered_Stream_Data *pd, Eina_Bool value)
 {
-   efl_io_closer_close_on_destructor_set(pd->inner_io, value);
+   efl_io_closer_close_on_invalidate_set(pd->inner_io, value);
 }
 
 EOLIAN static Eina_Error
@@ -369,7 +369,7 @@ _efl_io_buffered_stream_inner_io_set(Eo *o, 
Efl_Io_Buffered_Stream_Data *pd, Efl
                                efl_io_copier_buffer_limit_set(efl_added, 4096),
                                efl_io_copier_source_set(efl_added, io),
                                efl_io_copier_destination_set(efl_added, 
pd->incoming),
-                               
efl_io_closer_close_on_destructor_set(efl_added, 
efl_io_closer_close_on_destructor_get(io)),
+                               
efl_io_closer_close_on_invalidate_set(efl_added, 
efl_io_closer_close_on_invalidate_get(io)),
                                efl_event_callback_array_add(efl_added, 
_efl_io_buffered_stream_receiver_cbs(), o));
         EINA_SAFETY_ON_NULL_RETURN(pd->receiver);
      }
@@ -394,7 +394,7 @@ _efl_io_buffered_stream_inner_io_set(Eo *o, 
Efl_Io_Buffered_Stream_Data *pd, Efl
                              efl_io_copier_buffer_limit_set(efl_added, 4096),
                              efl_io_copier_source_set(efl_added, pd->outgoing),
                              efl_io_copier_destination_set(efl_added, io),
-                             efl_io_closer_close_on_destructor_set(efl_added, 
efl_io_closer_close_on_destructor_get(io)),
+                             efl_io_closer_close_on_invalidate_set(efl_added, 
efl_io_closer_close_on_invalidate_get(io)),
                              efl_event_callback_array_add(efl_added, 
_efl_io_buffered_stream_sender_cbs(), o));
         EINA_SAFETY_ON_NULL_RETURN(pd->sender);
      }
diff --git a/src/lib/ecore/efl_io_buffered_stream.eo 
b/src/lib/ecore/efl_io_buffered_stream.eo
index 5c413aea91..973de1849e 100644
--- a/src/lib/ecore/efl_io_buffered_stream.eo
+++ b/src/lib/ecore/efl_io_buffered_stream.eo
@@ -251,7 +251,7 @@ class Efl.Io.Buffered_Stream (Efl.Loop_Consumer, 
Efl.Io.Reader, Efl.Io.Writer, E
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
         Efl.Io.Reader.read;
         Efl.Io.Reader.can_read { get; set; }
         Efl.Io.Reader.eos { get; set; }
diff --git a/src/lib/ecore/efl_io_closer_fd.c b/src/lib/ecore/efl_io_closer_fd.c
index 9dcea594bc..d0ace13bfe 100644
--- a/src/lib/ecore/efl_io_closer_fd.c
+++ b/src/lib/ecore/efl_io_closer_fd.c
@@ -15,7 +15,7 @@ typedef struct _Efl_Io_Closer_Fd_Data
    int fd;
 
    Eina_Bool close_on_exec;
-   Eina_Bool close_on_destructor;
+   Eina_Bool close_on_invalidate;
 } Efl_Io_Closer_Fd_Data;
 
 static Efl_Object *
@@ -119,15 +119,15 @@ _efl_io_closer_fd_efl_io_closer_close_on_exec_get(const 
Eo *o, Efl_Io_Closer_Fd_
 }
 
 EOLIAN static void
-_efl_io_closer_fd_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, 
Efl_Io_Closer_Fd_Data *pd, Eina_Bool close_on_destructor)
+_efl_io_closer_fd_efl_io_closer_close_on_invalidate_set(Eo *o EINA_UNUSED, 
Efl_Io_Closer_Fd_Data *pd, Eina_Bool close_on_invalidate)
 {
-   pd->close_on_destructor = close_on_destructor;
+   pd->close_on_invalidate = close_on_invalidate;
 }
 
 EOLIAN static Eina_Bool
-_efl_io_closer_fd_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd)
+_efl_io_closer_fd_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Io_Closer_Fd_Data *pd)
 {
-   return pd->close_on_destructor;
+   return pd->close_on_invalidate;
 }
 
 #include "efl_io_closer_fd.eo.c"
diff --git a/src/lib/ecore/efl_io_closer_fd.eo 
b/src/lib/ecore/efl_io_closer_fd.eo
index b0b63b364b..721e449f1d 100644
--- a/src/lib/ecore/efl_io_closer_fd.eo
+++ b/src/lib/ecore/efl_io_closer_fd.eo
@@ -20,6 +20,6 @@ mixin Efl.Io.Closer_Fd (Efl.Io.Closer, Efl.Object) {
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
     }
 }
diff --git a/src/lib/ecore/efl_io_copier.c b/src/lib/ecore/efl_io_copier.c
index 9298459d89..686454912d 100644
--- a/src/lib/ecore/efl_io_copier.c
+++ b/src/lib/ecore/efl_io_copier.c
@@ -28,7 +28,7 @@ typedef struct _Efl_Io_Copier_Data
    Eina_Bool done;
    Eina_Bool force_dispatch;
    Eina_Bool close_on_exec;
-   Eina_Bool close_on_destructor;
+   Eina_Bool close_on_invalidate;
 } Efl_Io_Copier_Data;
 
 static void _efl_io_copier_write(Eo *o, Efl_Io_Copier_Data *pd);
@@ -433,7 +433,7 @@ _efl_io_copier_source_set(Eo *o, Efl_Io_Copier_Data *pd, 
Efl_Io_Reader *source)
         if (efl_isa(pd->source, EFL_IO_CLOSER_MIXIN))
           {
              efl_io_closer_close_on_exec_set(pd->source, 
efl_io_closer_close_on_exec_get(o));
-             efl_io_closer_close_on_destructor_set(pd->source, 
efl_io_closer_close_on_destructor_get(o));
+             efl_io_closer_close_on_invalidate_set(pd->source, 
efl_io_closer_close_on_invalidate_get(o));
              efl_event_callback_add(pd->source, EFL_IO_CLOSER_EVENT_CLOSED,
                                      _efl_io_copier_source_closed, o);
           }
@@ -512,7 +512,7 @@ _efl_io_copier_destination_set(Eo *o, Efl_Io_Copier_Data 
*pd, Efl_Io_Writer *des
         if (efl_isa(pd->destination, EFL_IO_CLOSER_MIXIN))
           {
              efl_io_closer_close_on_exec_set(pd->destination, 
efl_io_closer_close_on_exec_get(o));
-             efl_io_closer_close_on_destructor_set(pd->destination, 
efl_io_closer_close_on_destructor_get(o));
+             efl_io_closer_close_on_invalidate_set(pd->destination, 
efl_io_closer_close_on_invalidate_get(o));
              efl_event_callback_add(pd->destination, 
EFL_IO_CLOSER_EVENT_CLOSED,
                                      _efl_io_copier_destination_closed, o);
           }
@@ -806,7 +806,7 @@ _efl_io_copier_efl_object_constructor(Eo *o, 
Efl_Io_Copier_Data *pd)
 {
    pd->buf = eina_binbuf_new();
    pd->close_on_exec = EINA_TRUE;
-   pd->close_on_destructor = EINA_TRUE;
+   pd->close_on_invalidate = EINA_TRUE;
    pd->timeout_inactivity = 0.0;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(pd->buf, NULL);
@@ -836,17 +836,9 @@ _efl_io_copier_efl_object_finalize(Eo *o, 
Efl_Io_Copier_Data *pd)
 }
 
 EOLIAN static void
-_efl_io_copier_efl_object_destructor(Eo *o, Efl_Io_Copier_Data *pd)
+_efl_io_copier_efl_object_invalidate(Eo *o, Efl_Io_Copier_Data *pd EINA_UNUSED)
 {
-   _COPIER_DBG(o, pd);
-
-   if (pd->job)
-     eina_future_cancel(pd->job);
-
-   if (pd->inactivity_timer)
-     eina_future_cancel(pd->inactivity_timer);
-
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -857,6 +849,20 @@ _efl_io_copier_efl_object_destructor(Eo *o, 
Efl_Io_Copier_Data *pd)
    efl_io_copier_source_set(o, NULL);
    efl_io_copier_destination_set(o, NULL);
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_io_copier_efl_object_destructor(Eo *o, Efl_Io_Copier_Data *pd)
+{
+   _COPIER_DBG(o, pd);
+
+   if (pd->job)
+     eina_future_cancel(pd->job);
+
+   if (pd->inactivity_timer)
+     eina_future_cancel(pd->inactivity_timer);
+
    efl_destructor(efl_super(o, MY_CLASS));
 
    if (pd->buf)
@@ -895,22 +901,22 @@ _efl_io_copier_efl_io_closer_close_on_exec_get(const Eo 
*o EINA_UNUSED, Efl_Io_C
 }
 
 EOLIAN static void
-_efl_io_copier_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, 
Efl_Io_Copier_Data *pd, Eina_Bool close_on_destructor)
+_efl_io_copier_efl_io_closer_close_on_invalidate_set(Eo *o EINA_UNUSED, 
Efl_Io_Copier_Data *pd, Eina_Bool close_on_invalidate)
 {
-   if (pd->close_on_destructor == close_on_destructor) return;
-   pd->close_on_destructor = close_on_destructor;
+   if (pd->close_on_invalidate == close_on_invalidate) return;
+   pd->close_on_invalidate = close_on_invalidate;
 
    if (pd->source && efl_isa(pd->source, EFL_IO_CLOSER_MIXIN))
-     efl_io_closer_close_on_destructor_set(pd->source, close_on_destructor);
+     efl_io_closer_close_on_invalidate_set(pd->source, close_on_invalidate);
 
    if (pd->destination && efl_isa(pd->destination, EFL_IO_CLOSER_MIXIN))
-     efl_io_closer_close_on_destructor_set(pd->destination, 
close_on_destructor);
+     efl_io_closer_close_on_invalidate_set(pd->destination, 
close_on_invalidate);
 }
 
 EOLIAN static Eina_Bool
-_efl_io_copier_efl_io_closer_close_on_destructor_get(const Eo *o EINA_UNUSED, 
Efl_Io_Copier_Data *pd)
+_efl_io_copier_efl_io_closer_close_on_invalidate_get(const Eo *o EINA_UNUSED, 
Efl_Io_Copier_Data *pd)
 {
-   return pd->close_on_destructor;
+   return pd->close_on_invalidate;
 }
 
 #include "efl_io_copier.eo.c"
diff --git a/src/lib/ecore/efl_io_copier.eo b/src/lib/ecore/efl_io_copier.eo
index 345775eb77..ae40851681 100644
--- a/src/lib/ecore/efl_io_copier.eo
+++ b/src/lib/ecore/efl_io_copier.eo
@@ -57,7 +57,7 @@ class Efl.Io.Copier (Efl.Loop_Consumer, Efl.Io.Closer) {
       @.source and @.destination if they implement those interfaces.
 
       @Efl.Io.Closer.close_on_exec and
-      @Efl.Io.Closer.close_on_destructor are respected and applied to
+      @Efl.Io.Closer.close_on_invalidate are respected and applied to
       both source and destination. Both default to $true.
 
       @since 1.19
@@ -107,7 +107,7 @@ class Efl.Io.Copier (Efl.Loop_Consumer, Efl.Io.Closer) {
              If the source object implements @Efl.Io.Closer and it's
              not closed, it will be closed when the copier itself
              is. This may happen, for example, when the copier is
-             deleted and @Efl.Io.Closer.close_on_destructor is $true
+             deleted and @Efl.Io.Closer.close_on_invalidate is $true
              (the default).
 
              Common source classes are @Efl.Io.Buffer (if fixed data
@@ -166,7 +166,7 @@ class Efl.Io.Copier (Efl.Loop_Consumer, Efl.Io.Closer) {
              If the destination object implements @Efl.Io.Closer and it's
              not closed, it will be closed when the copier itself
              is. This may happen, for example, when the copier is
-             deleted and @Efl.Io.Closer.close_on_destructor is $true
+             deleted and @Efl.Io.Closer.close_on_invalidate is $true
              (the default).
 
              Common destination classes are @Efl.Io.Buffer (better to
@@ -370,11 +370,12 @@ class Efl.Io.Copier (Efl.Loop_Consumer, Efl.Io.Closer) {
 
     implements {
        Efl.Object.constructor;
-       Efl.Object.destructor;
        Efl.Object.finalize;
+       Efl.Object.invalidate;
+       Efl.Object.destructor;
        Efl.Io.Closer.close;
        Efl.Io.Closer.closed { get; }
        Efl.Io.Closer.close_on_exec { get; set; }
-       Efl.Io.Closer.close_on_destructor { get; set; }
+       Efl.Io.Closer.close_on_invalidate { get; set; }
     }
 }
diff --git a/src/lib/ecore/efl_io_file.c b/src/lib/ecore/efl_io_file.c
index cfee3371fc..c8716d2935 100644
--- a/src/lib/ecore/efl_io_file.c
+++ b/src/lib/ecore/efl_io_file.c
@@ -112,7 +112,7 @@ _efl_io_file_efl_object_constructor(Eo *o, Efl_Io_File_Data 
*pd)
    o = efl_constructor(efl_super(o, MY_CLASS));
 
    efl_io_closer_close_on_exec_set(o, EINA_TRUE);
-   efl_io_closer_close_on_destructor_set(o, EINA_TRUE);
+   efl_io_closer_close_on_invalidate_set(o, EINA_TRUE);
    efl_io_positioner_fd_set(o, -1);
    efl_io_sizer_fd_set(o, -1);
    efl_io_reader_fd_set(o, -1);
@@ -125,7 +125,7 @@ _efl_io_file_efl_object_constructor(Eo *o, Efl_Io_File_Data 
*pd)
 EOLIAN static void
 _efl_io_file_efl_object_destructor(Eo *o, Efl_Io_File_Data *pd)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
diff --git a/src/lib/ecore/efl_io_file.eo b/src/lib/ecore/efl_io_file.eo
index 4040f5dc86..b586a88ca2 100644
--- a/src/lib/ecore/efl_io_file.eo
+++ b/src/lib/ecore/efl_io_file.eo
@@ -2,7 +2,7 @@ class Efl.Io.File (Efl.Loop_Fd, Efl.File, Efl.Io.Reader_Fd, 
Efl.Io.Writer_Fd, Ef
     [[File access (open, close, read, write, lseek, ftruncate)
 
       @Efl.Io.Closer.close_on_exec and
-      @Efl.Io.Closer.close_on_destructor are respected and default to
+      @Efl.Io.Closer.close_on_invalidate are respected and default to
       $true. @Efl.Io.Closer.close_on_exec.set sets flag O_CLOEXEC.
 
       @since 1.19
diff --git a/src/lib/ecore_con/ecore_con_eet.c 
b/src/lib/ecore_con/ecore_con_eet.c
index 2b3a48b5cf..e5d07d5d9d 100644
--- a/src/lib/ecore_con/ecore_con_eet.c
+++ b/src/lib/ecore_con/ecore_con_eet.c
@@ -686,18 +686,18 @@ _ecore_con_eet_base_efl_object_constructor(Eo *obj, 
Ecore_Con_Eet_Base_Data *pd)
 EOLIAN static void
 _ecore_con_eet_base_efl_object_destructor(Eo *obj, Ecore_Con_Eet_Base_Data *pd)
 {
-   efl_destructor(efl_super(obj, ECORE_CON_EET_BASE_CLASS));
-
    eet_data_descriptor_free(pd->edd);
    eet_data_descriptor_free(pd->matching);
    eina_hash_free(pd->data_callbacks);
    eina_hash_free(pd->raw_data_callbacks);
+
+   efl_destructor(efl_super(obj, ECORE_CON_EET_BASE_CLASS));
 }
 
 EOLIAN static Efl_Object *
 _ecore_con_eet_base_efl_object_finalize(Eo *obj, Ecore_Con_Eet_Base_Data *pd)
 {
-   if (pd->server) return obj;
+   if (pd->server) return efl_finalize(efl_super(obj, 
ECORE_CON_EET_BASE_CLASS));
 
    eet_data_descriptor_free(pd->edd);
    eet_data_descriptor_free(pd->matching);
diff --git a/src/lib/ecore_con/ecore_con_legacy.c 
b/src/lib/ecore_con/ecore_con_legacy.c
index 356b25422a..a6246dba46 100644
--- a/src/lib/ecore_con/ecore_con_legacy.c
+++ b/src/lib/ecore_con/ecore_con_legacy.c
@@ -258,11 +258,11 @@ _ecore_con_client_socket_close(Ecore_Con_Client *cl)
 {
    if (!cl->socket) return;
 
-   /* socket may remain alive due other references, we don't own it */
-   efl_event_callback_array_del(cl->socket, _ecore_con_client_socket_cbs(), 
cl);
-
    if (!efl_io_closer_closed_get(cl->socket))
      efl_io_closer_close(cl->socket);
+
+   /* socket may remain alive due other references, we don't own it */
+   efl_event_callback_array_del(cl->socket, _ecore_con_client_socket_cbs(), 
cl);
 }
 
 static void
@@ -278,7 +278,7 @@ _ecore_con_client_free(Ecore_Con_Client *cl)
    if (cl->socket)
      {
         Eo *parent, *inner_socket = 
efl_io_buffered_stream_inner_io_get(cl->socket);
-        efl_event_callback_array_del(cl->socket, 
_ecore_con_client_socket_cbs(), cl);
+
         if (efl_isa(inner_socket, EFL_NET_SOCKET_SSL_CLASS))
           efl_event_callback_array_del(inner_socket, 
_ecore_con_client_socket_ssl_cbs(), cl);
 
@@ -843,11 +843,9 @@ _ecore_con_client_ssl_upgrade_job(void *data, const 
Eina_Value v,
 
    efl_parent_set(inner_socket, socket);
 
-   efl_unref(inner_socket); /* socket keeps it */
-
    cl->socket = socket;
    efl_io_closer_close_on_exec_set(socket, EINA_TRUE);
-   efl_io_closer_close_on_destructor_set(socket, EINA_TRUE);
+   efl_io_closer_close_on_invalidate_set(socket, EINA_TRUE);
    efl_event_callback_array_del(tcp_socket, _ecore_con_client_socket_cbs(), 
cl);
    efl_event_callback_array_add(socket, _ecore_con_client_socket_cbs(), cl);
    efl_event_callback_array_add(inner_socket, 
_ecore_con_client_socket_ssl_cbs(), cl);
@@ -1626,7 +1624,6 @@ _ecore_con_server_server_ssl_job(void *data, const 
Eina_Value v,
    efl_parent_set(inner_server, server);
 
    efl_unref(ssl_ctx); /* inner_server keeps it */
-   efl_unref(inner_server); /* server keeps it */
 
    if (!_ecore_con_server_server_set(svr, server))
      goto error_serve;
@@ -1852,7 +1849,7 @@ _ecore_con_server_dialer_set(Ecore_Con_Server *svr, Eo 
*dialer)
 
    svr->dialer = dialer;
    efl_io_closer_close_on_exec_set(dialer, EINA_TRUE);
-   efl_io_closer_close_on_destructor_set(dialer, EINA_TRUE);
+   efl_io_closer_close_on_invalidate_set(dialer, EINA_TRUE);
    efl_io_buffered_stream_timeout_inactivity_set(dialer, svr->timeout);
    efl_event_callback_array_add(dialer, _ecore_con_server_dialer_cbs(), svr);
 
@@ -1993,7 +1990,6 @@ _ecore_con_server_dialer_ssl_job(void *data, const 
Eina_Value v,
    efl_parent_set(inner_dialer, dialer);
 
    efl_unref(ssl_ctx); /* inner_dialer keeps it */
-   efl_unref(inner_dialer); /* dialer keeps it */
 
    if (!_ecore_con_server_dialer_set(svr, dialer))
      goto error_dial;
@@ -2092,11 +2088,10 @@ _ecore_con_server_dialer_ssl_upgrade_job(void *data, 
const Eina_Value v,
    efl_parent_set(inner_dialer, dialer);
 
    efl_unref(ssl_ctx); /* inner_dialer keeps it */
-   efl_unref(inner_dialer); /* dialer keeps it */
 
    svr->dialer = dialer;
    efl_io_closer_close_on_exec_set(dialer, EINA_TRUE);
-   efl_io_closer_close_on_destructor_set(dialer, EINA_TRUE);
+   efl_io_closer_close_on_invalidate_set(dialer, EINA_TRUE);
    efl_event_callback_array_del(tcp_dialer, _ecore_con_server_dialer_cbs(), 
svr);
    efl_event_callback_array_add(dialer, _ecore_con_server_dialer_cbs(), svr);
 
diff --git a/src/lib/ecore_con/ecore_con_url.c 
b/src/lib/ecore_con/ecore_con_url.c
index 6a9d06d582..3c9faea28c 100644
--- a/src/lib/ecore_con/ecore_con_url.c
+++ b/src/lib/ecore_con/ecore_con_url.c
@@ -922,7 +922,7 @@ ecore_con_url_post(Ecore_Con_Url *url_con,
 
    buffer = efl_add(EFL_IO_BUFFER_CLASS, efl_loop_get(url_con->dialer),
                     efl_name_set(efl_added, "post-buffer"),
-                    efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                    efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
                     efl_io_closer_close_on_exec_set(efl_added, EINA_TRUE));
    EINA_SAFETY_ON_NULL_GOTO(buffer, error_buffer);
 
@@ -938,7 +938,7 @@ ecore_con_url_post(Ecore_Con_Url *url_con,
                     efl_name_set(efl_added, "send-copier"),
                     efl_io_copier_source_set(efl_added, buffer),
                     efl_io_copier_destination_set(efl_added, url_con->dialer),
-                    efl_io_closer_close_on_destructor_set(efl_added, 
EINA_FALSE),
+                    efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_FALSE),
                     efl_event_callback_array_add(efl_added, 
_ecore_con_url_copier_cbs(), url_con));
    EINA_SAFETY_ON_NULL_GOTO(copier, error_copier);
 
@@ -1179,7 +1179,7 @@ ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
                   efl_name_set(efl_added, "upload-file"),
                   efl_file_set(efl_added, filename, NULL),
                   efl_io_file_flags_set(efl_added, O_RDONLY),
-                  efl_io_closer_close_on_destructor_set(efl_added, EINA_TRUE),
+                  efl_io_closer_close_on_invalidate_set(efl_added, EINA_TRUE),
                   efl_io_closer_close_on_exec_set(efl_added, EINA_TRUE));
    EINA_SAFETY_ON_NULL_GOTO(file, error_file);
 
@@ -1187,7 +1187,7 @@ ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
                     efl_name_set(efl_added, "send-copier"),
                     efl_io_copier_source_set(efl_added, file),
                     efl_io_copier_destination_set(efl_added, url_con->dialer),
-                    efl_io_closer_close_on_destructor_set(efl_added, 
EINA_FALSE),
+                    efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_FALSE),
                     efl_event_callback_array_add(efl_added, 
_ecore_con_url_copier_cbs(), url_con));
    EINA_SAFETY_ON_NULL_GOTO(copier, error_copier);
 
diff --git a/src/lib/ecore_con/efl_net_dialer_http.c 
b/src/lib/ecore_con/efl_net_dialer_http.c
index c31c0e4356..df1fedf61e 100644
--- a/src/lib/ecore_con/efl_net_dialer_http.c
+++ b/src/lib/ecore_con/efl_net_dialer_http.c
@@ -218,7 +218,7 @@ typedef struct
    Eina_Bool connected;
    Eina_Bool closed;
    Eina_Bool close_on_exec;
-   Eina_Bool close_on_destructor;
+   Eina_Bool close_on_invalidate;
    Eina_Bool pending_eos;
    Eina_Bool eos;
    Eina_Bool can_read;
@@ -1129,7 +1129,7 @@ _efl_net_dialer_http_efl_object_constructor(Eo *o, 
Efl_Net_Dialer_Http_Data *pd)
 }
 
 EOLIAN static void
-_efl_net_dialer_http_efl_object_destructor(Eo *o, Efl_Net_Dialer_Http_Data *pd)
+_efl_net_dialer_http_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Http_Data *pd)
 {
    if (pd->libproxy_thread)
      {
@@ -1149,7 +1149,7 @@ _efl_net_dialer_http_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Http_Data *pd)
         efl_io_closer_close(o);
         efl_event_thaw(o);
      }
-   else if (efl_io_closer_close_on_destructor_get(o) &&
+   else if (efl_io_closer_close_on_invalidate_get(o) &&
             (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -1157,6 +1157,12 @@ _efl_net_dialer_http_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Http_Data *pd)
         efl_event_thaw(o);
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_dialer_http_efl_object_destructor(Eo *o, Efl_Net_Dialer_Http_Data *pd)
+{
    efl_net_dialer_http_response_headers_clear(o);
 
    if (pd->easy)
@@ -1806,15 +1812,15 @@ 
_efl_net_dialer_http_efl_io_closer_close_on_exec_get(const Eo *o EINA_UNUSED, Ef
 }
 
 EOLIAN static void
-_efl_net_dialer_http_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, 
Efl_Net_Dialer_Http_Data *pd, Eina_Bool close_on_destructor)
+_efl_net_dialer_http_efl_io_closer_close_on_invalidate_set(Eo *o EINA_UNUSED, 
Efl_Net_Dialer_Http_Data *pd, Eina_Bool close_on_invalidate)
 {
-   pd->close_on_destructor = close_on_destructor;
+   pd->close_on_invalidate = close_on_invalidate;
 }
 
 EOLIAN static Eina_Bool
-_efl_net_dialer_http_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Net_Dialer_Http_Data *pd)
+_efl_net_dialer_http_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Net_Dialer_Http_Data *pd)
 {
-   return pd->close_on_destructor;
+   return pd->close_on_invalidate;
 }
 
 EOLIAN static Eina_Error
diff --git a/src/lib/ecore_con/efl_net_dialer_http.eo 
b/src/lib/ecore_con/efl_net_dialer_http.eo
index faecaebd35..7aab27cefb 100644
--- a/src/lib/ecore_con/efl_net_dialer_http.eo
+++ b/src/lib/ecore_con/efl_net_dialer_http.eo
@@ -393,6 +393,7 @@ class Efl.Net.Dialer_Http (Efl.Loop_Consumer, 
Efl.Net.Dialer, Efl.Io.Sizer) {
 
     implements {
         Efl.Object.constructor;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Net.Dialer.dial;
         Efl.Net.Dialer.address_dial { get; set; }
@@ -409,7 +410,7 @@ class Efl.Net.Dialer_Http (Efl.Loop_Consumer, 
Efl.Net.Dialer, Efl.Io.Sizer) {
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
         Efl.Io.Sizer.resize;
         Efl.Io.Sizer.size { get; }
     }
diff --git a/src/lib/ecore_con/efl_net_dialer_simple.c 
b/src/lib/ecore_con/efl_net_dialer_simple.c
index 8bf7b169a6..8d25c370e2 100644
--- a/src/lib/ecore_con/efl_net_dialer_simple.c
+++ b/src/lib/ecore_con/efl_net_dialer_simple.c
@@ -48,6 +48,7 @@ static void
 _efl_net_dialer_simple_inner_io_connected(void *data, const Efl_Event *event)
 {
    Eo *o = data;
+
    efl_event_callback_call(o, EFL_NET_DIALER_EVENT_CONNECTED, event->info);
 }
 
@@ -87,10 +88,24 @@ _efl_net_dialer_simple_efl_object_finalize(Eo *o, 
Efl_Net_Dialer_Simple_Data *pd
 }
 
 EOLIAN static void
-_efl_net_dialer_simple_efl_object_destructor(Eo *o, Efl_Net_Dialer_Simple_Data 
*pd)
+_efl_net_dialer_simple_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Simple_Data 
*pd EINA_UNUSED)
 {
    Eo *inner_io;
 
+   inner_io = efl_io_buffered_stream_inner_io_get(o);
+   if (inner_io)
+     {
+        efl_event_callback_array_del(inner_io, 
_efl_net_dialer_simple_inner_io_cbs(), o);
+        if (efl_parent_get(inner_io) == o)
+          efl_parent_set(inner_io, NULL);
+     }
+
+   efl_invalidate(efl_super(o, EFL_NET_DIALER_SIMPLE_CLASS));
+}
+
+EOLIAN static void
+_efl_net_dialer_simple_efl_object_destructor(Eo *o, Efl_Net_Dialer_Simple_Data 
*pd)
+{
    if (pd->inner_class) pd->inner_class = NULL;
 
    eina_stringshare_replace(&pd->proxy_url, NULL);
@@ -100,14 +115,6 @@ _efl_net_dialer_simple_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Simple_Data *
         pd->line_delimiter.mem = NULL;
      }
 
-   inner_io = efl_io_buffered_stream_inner_io_get(o);
-   if (inner_io)
-     {
-        efl_event_callback_array_del(inner_io, 
_efl_net_dialer_simple_inner_io_cbs(), o);
-        if (efl_parent_get(inner_io) == o)
-          efl_parent_set(inner_io, NULL);
-     }
-
    efl_destructor(efl_super(o, EFL_NET_DIALER_SIMPLE_CLASS));
 }
 
diff --git a/src/lib/ecore_con/efl_net_dialer_simple.eo 
b/src/lib/ecore_con/efl_net_dialer_simple.eo
index e1e6522f68..38ec878808 100644
--- a/src/lib/ecore_con/efl_net_dialer_simple.eo
+++ b/src/lib/ecore_con/efl_net_dialer_simple.eo
@@ -69,6 +69,7 @@ class Efl.Net.Dialer_Simple (Efl.Net.Socket_Simple, 
Efl.Net.Dialer) {
 
     implements {
         Efl.Object.finalize;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Io.Buffered_Stream.inner_io { set; }
         Efl.Net.Dialer.dial;
diff --git a/src/lib/ecore_con/efl_net_dialer_ssl.c 
b/src/lib/ecore_con/efl_net_dialer_ssl.c
index 4ecfc03530..9a89ea90d2 100644
--- a/src/lib/ecore_con/efl_net_dialer_ssl.c
+++ b/src/lib/ecore_con/efl_net_dialer_ssl.c
@@ -98,13 +98,7 @@ _efl_net_dialer_ssl_efl_object_invalidate(Eo *o, 
Efl_Net_Dialer_Ssl_Data *pd)
 {
    pd->sock = NULL;
 
-   efl_invalidate(efl_super(o, MY_CLASS));
-}
-
-EOLIAN static void
-_efl_net_dialer_ssl_efl_object_destructor(Eo *o, Efl_Net_Dialer_Ssl_Data *pd)
-{
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -118,7 +112,7 @@ _efl_net_dialer_ssl_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Ssl_Data *pd)
         pd->ssl_ctx = NULL;
      }
 
-   efl_destructor(efl_super(o, MY_CLASS));
+   efl_invalidate(efl_super(o, MY_CLASS));
 }
 
 EOLIAN static void
diff --git a/src/lib/ecore_con/efl_net_dialer_ssl.eo 
b/src/lib/ecore_con/efl_net_dialer_ssl.eo
index 7a9ffe5cd0..c732e1c621 100644
--- a/src/lib/ecore_con/efl_net_dialer_ssl.eo
+++ b/src/lib/ecore_con/efl_net_dialer_ssl.eo
@@ -68,7 +68,6 @@ class Efl.Net.Dialer_Ssl (Efl.Net.Socket_Ssl, Efl.Net.Dialer) 
{
         Efl.Object.constructor;
         Efl.Object.finalize;
         Efl.Object.invalidate;
-        Efl.Object.destructor;
         Efl.Net.Dialer.dial;
         Efl.Net.Dialer.address_dial { get; }
         Efl.Net.Dialer.connected { get; set; }
diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.c 
b/src/lib/ecore_con/efl_net_dialer_tcp.c
index 88f1bb7bb8..12e24b7238 100644
--- a/src/lib/ecore_con/efl_net_dialer_tcp.c
+++ b/src/lib/ecore_con/efl_net_dialer_tcp.c
@@ -53,9 +53,9 @@ _efl_net_dialer_tcp_efl_object_constructor(Eo *o, 
Efl_Net_Dialer_Tcp_Data *pd EI
 }
 
 EOLIAN static void
-_efl_net_dialer_tcp_efl_object_destructor(Eo *o, Efl_Net_Dialer_Tcp_Data *pd)
+_efl_net_dialer_tcp_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Tcp_Data *pd)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -69,6 +69,12 @@ _efl_net_dialer_tcp_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Tcp_Data *pd)
         pd->connect.thread = NULL;
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_dialer_tcp_efl_object_destructor(Eo *o, Efl_Net_Dialer_Tcp_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    eina_stringshare_replace(&pd->address_dial, NULL);
diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.eo 
b/src/lib/ecore_con/efl_net_dialer_tcp.eo
index c46084b151..757e926ab5 100644
--- a/src/lib/ecore_con/efl_net_dialer_tcp.eo
+++ b/src/lib/ecore_con/efl_net_dialer_tcp.eo
@@ -24,6 +24,7 @@ class Efl.Net.Dialer_Tcp (Efl.Net.Socket_Tcp, Efl.Net.Dialer) 
{
 
     implements {
         Efl.Object.constructor;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Net.Dialer.dial;
         Efl.Net.Dialer.address_dial { get; set; }
diff --git a/src/lib/ecore_con/efl_net_dialer_udp.c 
b/src/lib/ecore_con/efl_net_dialer_udp.c
index 1c7eda3fd1..89a7154710 100644
--- a/src/lib/ecore_con/efl_net_dialer_udp.c
+++ b/src/lib/ecore_con/efl_net_dialer_udp.c
@@ -54,9 +54,9 @@ _efl_net_dialer_udp_efl_object_constructor(Eo *o, 
Efl_Net_Dialer_Udp_Data *pd EI
 }
 
 EOLIAN static void
-_efl_net_dialer_udp_efl_object_destructor(Eo *o, Efl_Net_Dialer_Udp_Data *pd)
+_efl_net_dialer_udp_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Udp_Data *pd)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -70,6 +70,12 @@ _efl_net_dialer_udp_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Udp_Data *pd)
         pd->resolver.thread = NULL;
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_dialer_udp_efl_object_destructor(Eo *o, Efl_Net_Dialer_Udp_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    eina_stringshare_replace(&pd->address_dial, NULL);
diff --git a/src/lib/ecore_con/efl_net_dialer_udp.eo 
b/src/lib/ecore_con/efl_net_dialer_udp.eo
index 56f34413af..4e5a407015 100644
--- a/src/lib/ecore_con/efl_net_dialer_udp.eo
+++ b/src/lib/ecore_con/efl_net_dialer_udp.eo
@@ -27,6 +27,7 @@ class Efl.Net.Dialer_Udp (Efl.Net.Socket_Udp, Efl.Net.Dialer) 
{
 
     implements {
         Efl.Object.constructor;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Net.Dialer.dial;
         Efl.Net.Dialer.address_dial { get; set; }
diff --git a/src/lib/ecore_con/efl_net_dialer_unix.c 
b/src/lib/ecore_con/efl_net_dialer_unix.c
index 9c20bf19c6..683a37b89f 100644
--- a/src/lib/ecore_con/efl_net_dialer_unix.c
+++ b/src/lib/ecore_con/efl_net_dialer_unix.c
@@ -43,9 +43,9 @@ _efl_net_dialer_unix_efl_object_constructor(Eo *o, 
Efl_Net_Dialer_Unix_Data *pd
 }
 
 EOLIAN static void
-_efl_net_dialer_unix_efl_object_destructor(Eo *o, Efl_Net_Dialer_Unix_Data *pd)
+_efl_net_dialer_unix_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Unix_Data *pd)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -59,6 +59,12 @@ _efl_net_dialer_unix_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Unix_Data *pd)
         pd->connect.thread = NULL;
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_dialer_unix_efl_object_destructor(Eo *o, Efl_Net_Dialer_Unix_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    eina_stringshare_replace(&pd->address_dial, NULL);
diff --git a/src/lib/ecore_con/efl_net_dialer_unix.eo 
b/src/lib/ecore_con/efl_net_dialer_unix.eo
index aafe27fdf6..a45d2be5c7 100644
--- a/src/lib/ecore_con/efl_net_dialer_unix.eo
+++ b/src/lib/ecore_con/efl_net_dialer_unix.eo
@@ -12,6 +12,7 @@ class Efl.Net.Dialer_Unix (Efl.Net.Socket_Unix, 
Efl.Net.Dialer) {
 
     implements {
         Efl.Object.constructor;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Net.Dialer.dial;
         Efl.Net.Dialer.address_dial { get; set; }
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.c 
b/src/lib/ecore_con/efl_net_dialer_websocket.c
index 79e03f08cc..80c598ac4b 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.c
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.c
@@ -1374,15 +1374,15 @@ 
_efl_net_dialer_websocket_efl_io_closer_close_on_exec_get(const Eo *o EINA_UNUSE
 }
 
 EOLIAN static void
-_efl_net_dialer_websocket_efl_io_closer_close_on_destructor_set(Eo *o 
EINA_UNUSED, Efl_Net_Dialer_Websocket_Data *pd, Eina_Bool close_on_destructor)
+_efl_net_dialer_websocket_efl_io_closer_close_on_invalidate_set(Eo *o 
EINA_UNUSED, Efl_Net_Dialer_Websocket_Data *pd, Eina_Bool close_on_invalidate)
 {
-   efl_io_closer_close_on_destructor_set(pd->http, close_on_destructor);
+   efl_io_closer_close_on_invalidate_set(pd->http, close_on_invalidate);
 }
 
 EOLIAN static Eina_Bool
-_efl_net_dialer_websocket_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Net_Dialer_Websocket_Data *pd)
+_efl_net_dialer_websocket_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Net_Dialer_Websocket_Data *pd)
 {
-   return efl_io_closer_close_on_destructor_get(pd->http);
+   return efl_io_closer_close_on_invalidate_get(pd->http);
 }
 
 EOLIAN static void
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.eo 
b/src/lib/ecore_con/efl_net_dialer_websocket.eo
index a994e590c2..f22bf54104 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.eo
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.eo
@@ -331,6 +331,6 @@ class Efl.Net.Dialer_Websocket (Efl.Loop_Consumer, 
Efl.Net.Dialer) {
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
     }
 }
diff --git a/src/lib/ecore_con/efl_net_server_simple.c 
b/src/lib/ecore_con/efl_net_server_simple.c
index 4dec2200fb..8c0c4a6732 100644
--- a/src/lib/ecore_con/efl_net_server_simple.c
+++ b/src/lib/ecore_con/efl_net_server_simple.c
@@ -161,10 +161,8 @@ _efl_net_server_simple_efl_object_invalidate(Eo *o, 
Efl_Net_Server_Simple_Data *
    if (pd->inner_server)
      {
         efl_event_callback_array_del(pd->inner_server, 
_efl_net_server_simple_inner_server_cbs(), o);
-        if (efl_parent_get(pd->inner_server) == o)
-          efl_parent_set(pd->inner_server, NULL);
 
-        efl_unref(pd->inner_server);
+        efl_xunref(pd->inner_server, o);
         pd->inner_server = NULL;
      }
 
@@ -232,7 +230,7 @@ _efl_net_server_simple_inner_server_set(Eo *o, 
Efl_Net_Server_Simple_Data *pd, E
    EINA_SAFETY_ON_TRUE_RETURN(pd->inner_server != NULL);
    EINA_SAFETY_ON_FALSE_RETURN(efl_isa(server, EFL_NET_SERVER_INTERFACE));
 
-   pd->inner_server = efl_ref(server);
+   pd->inner_server = efl_xref(server, o);
    efl_event_callback_array_add(server, 
_efl_net_server_simple_inner_server_cbs(), o);
    DBG("%p inner_server=%p (%s)", o, server, 
efl_class_name_get(efl_class_get(server)));
 }
diff --git a/src/lib/ecore_con/efl_net_server_ssl.c 
b/src/lib/ecore_con/efl_net_server_ssl.c
index 7315484b1c..c865e7d0ab 100644
--- a/src/lib/ecore_con/efl_net_server_ssl.c
+++ b/src/lib/ecore_con/efl_net_server_ssl.c
@@ -89,7 +89,7 @@ _efl_net_server_ssl_efl_net_server_fd_client_add(Eo *o, 
Efl_Net_Server_Ssl_Data
 
    client_tcp = efl_add(EFL_NET_SOCKET_TCP_CLASS, o,
                         efl_io_closer_close_on_exec_set(efl_added, 
efl_net_server_fd_close_on_exec_get(o)),
-                        efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                        efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
                         efl_loop_fd_set(efl_added, client_fd));
    if (!client_tcp)
      {
diff --git a/src/lib/ecore_con/efl_net_server_tcp.c 
b/src/lib/ecore_con/efl_net_server_tcp.c
index b56984f853..e4e5bcb377 100644
--- a/src/lib/ecore_con/efl_net_server_tcp.c
+++ b/src/lib/ecore_con/efl_net_server_tcp.c
@@ -253,7 +253,7 @@ _efl_net_server_tcp_efl_net_server_fd_client_add(Eo *o, 
Efl_Net_Server_Tcp_Data
 {
    Eo *client = efl_add(EFL_NET_SOCKET_TCP_CLASS, o,
                         efl_io_closer_close_on_exec_set(efl_added, 
efl_net_server_fd_close_on_exec_get(o)),
-                        efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                        efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
                         efl_loop_fd_set(efl_added, client_fd));
    if (!client)
      {
diff --git a/src/lib/ecore_con/efl_net_server_udp.c 
b/src/lib/ecore_con/efl_net_server_udp.c
index 674945ec86..ced3e04662 100644
--- a/src/lib/ecore_con/efl_net_server_udp.c
+++ b/src/lib/ecore_con/efl_net_server_udp.c
@@ -369,7 +369,7 @@ 
_efl_net_server_udp_efl_net_server_fd_process_incoming_data(Eo *o, Efl_Net_Serve
      }
 
    client = efl_add(EFL_NET_SERVER_UDP_CLIENT_CLASS, o,
-                    efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                    efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
 
                     efl_net_socket_address_local_set(efl_added, 
efl_net_server_address_get(o)),
                     _efl_net_server_udp_client_init(efl_added, fd, (const 
struct sockaddr *)&addr, addrlen, str),
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 33d4716269..52a9d38008 100644
--- a/src/lib/ecore_con/efl_net_server_udp_client.c
+++ b/src/lib/ecore_con/efl_net_server_udp_client.c
@@ -42,7 +42,7 @@ typedef struct _Efl_Net_Server_Udp_Client_Data
    struct sockaddr *addr_remote;
    socklen_t addr_remote_len;
    SOCKET fd;
-   Eina_Bool close_on_destructor;
+   Eina_Bool close_on_invalidate;
    Eina_Bool eos;
    Eina_Bool can_read;
    Eina_Bool can_write;
@@ -71,9 +71,9 @@ 
_efl_net_server_udp_client_cleanup(Efl_Net_Server_Udp_Client_Data *pd)
 }
 
 EOLIAN static void
-_efl_net_server_udp_client_efl_object_destructor(Eo *o, 
Efl_Net_Server_Udp_Client_Data *pd)
+_efl_net_server_udp_client_efl_object_invalidate(Eo *o, 
Efl_Net_Server_Udp_Client_Data *pd EINA_UNUSED)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -81,6 +81,12 @@ _efl_net_server_udp_client_efl_object_destructor(Eo *o, 
Efl_Net_Server_Udp_Clien
         efl_event_thaw(o);
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_server_udp_client_efl_object_destructor(Eo *o, 
Efl_Net_Server_Udp_Client_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    _efl_net_server_udp_client_cleanup(pd);
@@ -269,15 +275,15 @@ _efl_net_server_udp_client_efl_io_closer_closed_get(const 
Eo *o EINA_UNUSED, Efl
 }
 
 EOLIAN static void
-_efl_net_server_udp_client_efl_io_closer_close_on_destructor_set(Eo *o 
EINA_UNUSED, Efl_Net_Server_Udp_Client_Data *pd, Eina_Bool close_on_destructor)
+_efl_net_server_udp_client_efl_io_closer_close_on_invalidate_set(Eo *o 
EINA_UNUSED, Efl_Net_Server_Udp_Client_Data *pd, Eina_Bool close_on_invalidate)
 {
-   pd->close_on_destructor = close_on_destructor;
+   pd->close_on_invalidate = close_on_invalidate;
 }
 
 EOLIAN static Eina_Bool
-_efl_net_server_udp_client_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Net_Server_Udp_Client_Data *pd)
+_efl_net_server_udp_client_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Net_Server_Udp_Client_Data *pd)
 {
-   return pd->close_on_destructor;
+   return pd->close_on_invalidate;
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/ecore_con/efl_net_server_udp_client.eo 
b/src/lib/ecore_con/efl_net_server_udp_client.eo
index 12f5bbce4a..6eeeedef31 100644
--- a/src/lib/ecore_con/efl_net_server_udp_client.eo
+++ b/src/lib/ecore_con/efl_net_server_udp_client.eo
@@ -26,10 +26,11 @@ class Efl.Net.Server_Udp_Client (Efl.Object, 
Efl.Net.Socket) {
 
     implements {
         Efl.Object.finalize;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
         Efl.Io.Closer.close_on_exec { get; set; }
         Efl.Io.Reader.can_read { get; set; }
         Efl.Io.Reader.eos { get; set; }
diff --git a/src/lib/ecore_con/efl_net_server_unix.c 
b/src/lib/ecore_con/efl_net_server_unix.c
index a0ab684858..38280c27c8 100644
--- a/src/lib/ecore_con/efl_net_server_unix.c
+++ b/src/lib/ecore_con/efl_net_server_unix.c
@@ -246,7 +246,7 @@ _efl_net_server_unix_efl_net_server_fd_client_add(Eo *o, 
Efl_Net_Server_Unix_Dat
 {
    Eo *client = efl_add(EFL_NET_SOCKET_UNIX_CLASS, o,
                         efl_io_closer_close_on_exec_set(efl_added, 
efl_net_server_fd_close_on_exec_get(o)),
-                        efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                        efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
                         efl_loop_fd_set(efl_added, client_fd));
    if (!client)
      {
diff --git a/src/lib/ecore_con/efl_net_server_windows.c 
b/src/lib/ecore_con/efl_net_server_windows.c
index fc01728d42..1e0375ead1 100644
--- a/src/lib/ecore_con/efl_net_server_windows.c
+++ b/src/lib/ecore_con/efl_net_server_windows.c
@@ -231,7 +231,7 @@ _efl_net_server_windows_client_new(Eo *o, 
Efl_Net_Server_Windows_Data *pd)
      }
 
    pd->next_client = efl_add(EFL_NET_SOCKET_WINDOWS_CLASS, o,
-                             efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE));
+                             efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE));
    if (!pd->next_client)
      {
         err = ENOMEM;
diff --git a/src/lib/ecore_con/efl_net_socket_fd.c 
b/src/lib/ecore_con/efl_net_socket_fd.c
index 14c2142006..3ade365fc2 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.c
+++ b/src/lib/ecore_con/efl_net_socket_fd.c
@@ -78,7 +78,7 @@ _efl_net_socket_fd_efl_object_constructor(Eo *o, 
Efl_Net_Socket_Fd_Data *pd)
    o = efl_constructor(efl_super(o, MY_CLASS));
 
    efl_io_closer_close_on_exec_set(o, EINA_TRUE);
-   efl_io_closer_close_on_destructor_set(o, EINA_TRUE);
+   efl_io_closer_close_on_invalidate_set(o, EINA_TRUE);
    efl_io_reader_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
    efl_io_writer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
    efl_io_closer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
@@ -87,9 +87,9 @@ _efl_net_socket_fd_efl_object_constructor(Eo *o, 
Efl_Net_Socket_Fd_Data *pd)
 }
 
 EOLIAN static void
-_efl_net_socket_fd_efl_object_destructor(Eo *o, Efl_Net_Socket_Fd_Data *pd)
+_efl_net_socket_fd_efl_object_invalidate(Eo *o, Efl_Net_Socket_Fd_Data *pd 
EINA_UNUSED)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -97,6 +97,12 @@ _efl_net_socket_fd_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Fd_Data *pd)
         efl_event_thaw(o);
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_socket_fd_efl_object_destructor(Eo *o, Efl_Net_Socket_Fd_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    eina_stringshare_replace(&pd->address_local, NULL);
diff --git a/src/lib/ecore_con/efl_net_socket_fd.eo 
b/src/lib/ecore_con/efl_net_socket_fd.eo
index 8cce3ff318..951fe7f8cc 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.eo
+++ b/src/lib/ecore_con/efl_net_socket_fd.eo
@@ -5,7 +5,7 @@ class Efl.Net.Socket_Fd (Efl.Loop_Fd, Efl.Io.Reader_Fd, 
Efl.Io.Writer_Fd, Efl.Io
       created by an dialer or server.
 
       @Efl.Io.Closer.close_on_exec and
-      @Efl.Io.Closer.close_on_destructor are respected and default to
+      @Efl.Io.Closer.close_on_invalidate are respected and default to
       $true.
 
       @since 1.19
@@ -32,6 +32,7 @@ class Efl.Net.Socket_Fd (Efl.Loop_Fd, Efl.Io.Reader_Fd, 
Efl.Io.Writer_Fd, Efl.Io
     implements {
         Efl.Object.finalize;
         Efl.Object.constructor;
+        Efl.Object.invalidate;
         Efl.Object.destructor;
         Efl.Loop_Fd.fd { set; }
         Efl.Io.Closer.close;
diff --git a/src/lib/ecore_con/efl_net_socket_ssl.c 
b/src/lib/ecore_con/efl_net_socket_ssl.c
index a281d0f722..b91f6649d3 100644
--- a/src/lib/ecore_con/efl_net_socket_ssl.c
+++ b/src/lib/ecore_con/efl_net_socket_ssl.c
@@ -445,9 +445,9 @@ _efl_net_socket_ssl_efl_object_constructor(Eo *o, 
Efl_Net_Socket_Ssl_Data *pd)
 }
 
 EOLIAN static void
-_efl_net_socket_ssl_efl_object_destructor(Eo *o, Efl_Net_Socket_Ssl_Data *pd)
+_efl_net_socket_ssl_efl_object_invalidate(Eo *o, Efl_Net_Socket_Ssl_Data *pd 
EINA_UNUSED)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -455,6 +455,12 @@ _efl_net_socket_ssl_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Ssl_Data *pd)
         efl_event_thaw(o);
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_socket_ssl_efl_object_destructor(Eo *o, Efl_Net_Socket_Ssl_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    pd->torndown = EINA_TRUE;
@@ -617,15 +623,15 @@ _efl_net_socket_ssl_efl_io_closer_close_on_exec_get(const 
Eo *o EINA_UNUSED, Efl
 }
 
 EOLIAN static void
-_efl_net_socket_ssl_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, 
Efl_Net_Socket_Ssl_Data *pd, Eina_Bool close_on_destructor)
+_efl_net_socket_ssl_efl_io_closer_close_on_invalidate_set(Eo *o EINA_UNUSED, 
Efl_Net_Socket_Ssl_Data *pd, Eina_Bool close_on_invalidate)
 {
-   if (pd->sock) efl_io_closer_close_on_destructor_set(pd->sock, 
close_on_destructor);
+   if (pd->sock) efl_io_closer_close_on_invalidate_set(pd->sock, 
close_on_invalidate);
 }
 
 EOLIAN static Eina_Bool
-_efl_net_socket_ssl_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Net_Socket_Ssl_Data *pd)
+_efl_net_socket_ssl_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Net_Socket_Ssl_Data *pd)
 {
-   return pd->sock && efl_io_closer_close_on_destructor_get(pd->sock);
+   return pd->sock && efl_io_closer_close_on_invalidate_get(pd->sock);
 }
 
 EOLIAN static const char *
diff --git a/src/lib/ecore_con/efl_net_socket_ssl.eo 
b/src/lib/ecore_con/efl_net_socket_ssl.eo
index 2e6ee11099..4f461814b3 100644
--- a/src/lib/ecore_con/efl_net_socket_ssl.eo
+++ b/src/lib/ecore_con/efl_net_socket_ssl.eo
@@ -84,12 +84,13 @@ class Efl.Net.Socket_Ssl (Efl.Loop_Consumer, 
Efl.Net.Socket) {
 
     implements {
         Efl.Object.constructor;
-        Efl.Object.destructor;
         Efl.Object.finalize;
+        Efl.Object.invalidate;
+        Efl.Object.destructor;
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
         Efl.Io.Reader.read;
         Efl.Io.Reader.can_read { get; set; }
         Efl.Io.Reader.eos { get; set; }
diff --git a/src/lib/ecore_con/efl_net_socket_windows.c 
b/src/lib/ecore_con/efl_net_socket_windows.c
index 33e166aea1..c69d0a8b6d 100644
--- a/src/lib/ecore_con/efl_net_socket_windows.c
+++ b/src/lib/ecore_con/efl_net_socket_windows.c
@@ -47,7 +47,7 @@ typedef struct _Efl_Net_Socket_Windows_Data
    Eina_Bool can_write;
    Eina_Bool io_started;
    Eina_Bool close_on_exec;
-   Eina_Bool close_on_destructor;
+   Eina_Bool close_on_invalidate;
 } Efl_Net_Socket_Windows_Data;
 
 struct _Efl_Net_Socket_Windows_Operation
@@ -634,9 +634,9 @@ _efl_net_socket_windows_efl_object_constructor(Eo *o, 
Efl_Net_Socket_Windows_Dat
 }
 
 EOLIAN static void
-_efl_net_socket_windows_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Windows_Data *pd)
+_efl_net_socket_windows_efl_object_invalidate(Eo *o, 
Efl_Net_Socket_Windows_Data *pd)
 {
-   if (efl_io_closer_close_on_destructor_get(o) &&
+   if (efl_io_closer_close_on_invalidate_get(o) &&
        (!efl_io_closer_closed_get(o)))
      {
         efl_event_freeze(o);
@@ -644,6 +644,12 @@ _efl_net_socket_windows_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Windows_Data
         efl_event_thaw(o);
      }
 
+   efl_invalidate(efl_super(o, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_net_socket_windows_efl_object_destructor(Eo *o, 
Efl_Net_Socket_Windows_Data *pd)
+{
    efl_destructor(efl_super(o, MY_CLASS));
 
    eina_stringshare_replace(&pd->address_local, NULL);
@@ -748,15 +754,15 @@ 
_efl_net_socket_windows_efl_io_closer_close_on_exec_get(const Eo *o EINA_UNUSED,
 }
 
 EOLIAN static void
-_efl_net_socket_windows_efl_io_closer_close_on_destructor_set(Eo *o 
EINA_UNUSED, Efl_Net_Socket_Windows_Data *pd, Eina_Bool close_on_destructor)
+_efl_net_socket_windows_efl_io_closer_close_on_invalidate_set(Eo *o 
EINA_UNUSED, Efl_Net_Socket_Windows_Data *pd, Eina_Bool close_on_invalidate)
 {
-   pd->close_on_destructor = close_on_destructor;
+   pd->close_on_invalidate = close_on_invalidate;
 }
 
 EOLIAN static Eina_Bool
-_efl_net_socket_windows_efl_io_closer_close_on_destructor_get(const Eo *o 
EINA_UNUSED, Efl_Net_Socket_Windows_Data *pd)
+_efl_net_socket_windows_efl_io_closer_close_on_invalidate_get(const Eo *o 
EINA_UNUSED, Efl_Net_Socket_Windows_Data *pd)
 {
-   return pd->close_on_destructor;
+   return pd->close_on_invalidate;
 }
 
 EOLIAN static Eina_Error
diff --git a/src/lib/ecore_con/efl_net_socket_windows.eo 
b/src/lib/ecore_con/efl_net_socket_windows.eo
index 8df3b4c860..95cdea693c 100644
--- a/src/lib/ecore_con/efl_net_socket_windows.eo
+++ b/src/lib/ecore_con/efl_net_socket_windows.eo
@@ -14,7 +14,7 @@ class Efl.Net.Socket_Windows (Efl.Loop_Consumer, 
Efl.Net.Socket) {
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
         Efl.Io.Reader.read;
         Efl.Io.Reader.can_read { get; set; }
         Efl.Io.Reader.eos { get; set; }
diff --git a/src/lib/ecore_file/ecore_file_download.c 
b/src/lib/ecore_file/ecore_file_download.c
index 1323dbc8e6..54666693d2 100644
--- a/src/lib/ecore_file/ecore_file_download.c
+++ b/src/lib/ecore_file/ecore_file_download.c
@@ -230,14 +230,14 @@ ecore_file_download_full(const char *url,
                          efl_file_set(efl_added, dst, NULL),
                          efl_io_file_flags_set(efl_added, O_WRONLY | O_CREAT),
                          efl_io_closer_close_on_exec_set(efl_added, EINA_TRUE),
-                         efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                         efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
                          efl_io_file_mode_set(efl_added, 0644));
    EINA_SAFETY_ON_NULL_GOTO(job->output, error_output);
 
    job->copier = efl_add(EFL_IO_COPIER_CLASS, loop,
                          efl_io_copier_source_set(efl_added, job->input),
                          efl_io_copier_destination_set(efl_added, job->output),
-                         efl_io_closer_close_on_destructor_set(efl_added, 
EINA_TRUE),
+                         efl_io_closer_close_on_invalidate_set(efl_added, 
EINA_TRUE),
                          efl_event_callback_array_add(efl_added, 
ecore_file_download_copier_cbs(), job));
    EINA_SAFETY_ON_NULL_GOTO(job->copier, error_copier);
 
diff --git a/src/lib/ecore_ipc/ecore_ipc.c b/src/lib/ecore_ipc/ecore_ipc.c
index d4b11617ce..babf033a17 100644
--- a/src/lib/ecore_ipc/ecore_ipc.c
+++ b/src/lib/ecore_ipc/ecore_ipc.c
@@ -745,21 +745,21 @@ ecore_ipc_server_connect(Ecore_Ipc_Type type, char *name, 
int port, const void *
         goto error_dialer;
      }
 
-   efl_io_closer_close_on_destructor_set(svr->dialer.dialer, EINA_TRUE);
+   efl_io_closer_close_on_invalidate_set(svr->dialer.dialer, EINA_TRUE);
    efl_event_callback_array_add(svr->dialer.dialer, _ecore_ipc_dialer_cbs(), 
svr);
 
    svr->dialer.input = efl_add(EFL_IO_QUEUE_CLASS, loop);
    EINA_SAFETY_ON_NULL_GOTO(svr->dialer.input, error);
 
    svr->dialer.send_copier = efl_add(EFL_IO_COPIER_CLASS, loop,
-                                     
efl_io_closer_close_on_destructor_set(efl_added, EINA_FALSE),
+                                     
efl_io_closer_close_on_invalidate_set(efl_added, EINA_FALSE),
                                      efl_io_copier_source_set(efl_added, 
svr->dialer.input),
                                      efl_io_copier_destination_set(efl_added, 
svr->dialer.dialer),
                                      efl_event_callback_array_add(efl_added, 
_ecore_ipc_dialer_copier_cbs(), svr));
    EINA_SAFETY_ON_NULL_GOTO(svr->dialer.send_copier, error);
 
    svr->dialer.recv_copier = efl_add(EFL_IO_COPIER_CLASS, loop,
-                                     
efl_io_closer_close_on_destructor_set(efl_added, EINA_FALSE),
+                                     
efl_io_closer_close_on_invalidate_set(efl_added, EINA_FALSE),
                                      efl_io_copier_source_set(efl_added, 
svr->dialer.dialer),
                                      efl_event_callback_array_add(efl_added, 
_ecore_ipc_dialer_copier_cbs(), svr),
                                      efl_event_callback_add(efl_added, 
EFL_IO_COPIER_EVENT_DATA, _ecore_ipc_dialer_copier_data, svr));
@@ -1343,14 +1343,14 @@ _ecore_ipc_server_client_add(void *data, const 
Efl_Event *event)
    EINA_SAFETY_ON_NULL_GOTO(cl->socket.input, error);
 
    cl->socket.send_copier = efl_add(EFL_IO_COPIER_CLASS, loop,
-                                     
efl_io_closer_close_on_destructor_set(efl_added, EINA_FALSE),
+                                     
efl_io_closer_close_on_invalidate_set(efl_added, EINA_FALSE),
                                      efl_io_copier_source_set(efl_added, 
cl->socket.input),
                                      efl_io_copier_destination_set(efl_added, 
cl->socket.socket),
                                      efl_event_callback_array_add(efl_added, 
_ecore_ipc_client_socket_copier_cbs(), cl));
    EINA_SAFETY_ON_NULL_GOTO(cl->socket.send_copier, error);
 
    cl->socket.recv_copier = efl_add(EFL_IO_COPIER_CLASS, loop,
-                                     
efl_io_closer_close_on_destructor_set(efl_added, EINA_FALSE),
+                                     
efl_io_closer_close_on_invalidate_set(efl_added, EINA_FALSE),
                                      efl_io_copier_source_set(efl_added, 
cl->socket.socket),
                                      efl_event_callback_array_add(efl_added, 
_ecore_ipc_client_socket_copier_cbs(), cl),
                                      efl_event_callback_add(efl_added, 
EFL_IO_COPIER_EVENT_DATA, _ecore_ipc_client_socket_copier_data, cl));
diff --git a/src/lib/efl/interfaces/efl_io_buffer.c 
b/src/lib/efl/interfaces/efl_io_buffer.c
index 5a0a0d10ba..c0c505e6b8 100644
--- a/src/lib/efl/interfaces/efl_io_buffer.c
+++ b/src/lib/efl/interfaces/efl_io_buffer.c
@@ -356,12 +356,12 @@ _efl_io_buffer_efl_io_closer_close_on_exec_get(const Eo 
*o EINA_UNUSED, Efl_Io_B
 }
 
 EOLIAN static void
-_efl_io_buffer_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, 
Efl_Io_Buffer_Data *pd EINA_UNUSED, Eina_Bool close_on_destructor EINA_UNUSED)
+_efl_io_buffer_efl_io_closer_close_on_invalidate_set(Eo *o EINA_UNUSED, 
Efl_Io_Buffer_Data *pd EINA_UNUSED, Eina_Bool close_on_invalidate EINA_UNUSED)
 {
 }
 
 EOLIAN static Eina_Bool
-_efl_io_buffer_efl_io_closer_close_on_destructor_get(const Eo *o EINA_UNUSED, 
Efl_Io_Buffer_Data *pd EINA_UNUSED)
+_efl_io_buffer_efl_io_closer_close_on_invalidate_get(const Eo *o EINA_UNUSED, 
Efl_Io_Buffer_Data *pd EINA_UNUSED)
 {
    return EINA_TRUE;
 }
diff --git a/src/lib/efl/interfaces/efl_io_buffer.eo 
b/src/lib/efl/interfaces/efl_io_buffer.eo
index 75358d7bb3..428d45aeaa 100644
--- a/src/lib/efl/interfaces/efl_io_buffer.eo
+++ b/src/lib/efl/interfaces/efl_io_buffer.eo
@@ -153,7 +153,7 @@ class Efl.Io.Buffer (Efl.Object, Efl.Io.Reader, 
Efl.Io.Writer, Efl.Io.Closer, Ef
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
         Efl.Io.Sizer.resize;
         Efl.Io.Sizer.size { get; }
         Efl.Io.Positioner.seek;
diff --git a/src/lib/efl/interfaces/efl_io_closer.eo 
b/src/lib/efl/interfaces/efl_io_closer.eo
index f14c94401f..863be86c31 100644
--- a/src/lib/efl/interfaces/efl_io_closer.eo
+++ b/src/lib/efl/interfaces/efl_io_closer.eo
@@ -59,16 +59,16 @@ mixin Efl.Io.Closer {
             }
         }
 
-        @property close_on_destructor {
-            [[If true will automatically close() on object destructor.
+        @property close_on_invalidate {
+            [[If true will automatically close() on object invalidate.
 
-              If the object was deleted without close, this property
-              will state whenever it should be closed or not.
+              If the object was disconnected from its parent (including the 
main loop) without close,
+             this property will state whenever it should be closed or not.
             ]]
             get @pure_virtual { }
             set @pure_virtual { }
             values {
-                close_on_destructor: bool; [[$true if close on destructor, 
$false otherwise]]
+                close_on_invalidate: bool; [[$true if close on invalidate, 
$false otherwise]]
             }
         }
     }
diff --git a/src/lib/efl/interfaces/efl_io_queue.c 
b/src/lib/efl/interfaces/efl_io_queue.c
index 9885a5b693..20f3e951ef 100644
--- a/src/lib/efl/interfaces/efl_io_queue.c
+++ b/src/lib/efl/interfaces/efl_io_queue.c
@@ -483,12 +483,12 @@ _efl_io_queue_efl_io_closer_close_on_exec_get(const Eo *o 
EINA_UNUSED, Efl_Io_Qu
 }
 
 EOLIAN static void
-_efl_io_queue_efl_io_closer_close_on_destructor_set(Eo *o EINA_UNUSED, 
Efl_Io_Queue_Data *pd EINA_UNUSED, Eina_Bool close_on_destructor EINA_UNUSED)
+_efl_io_queue_efl_io_closer_close_on_invalidate_set(Eo *o EINA_UNUSED, 
Efl_Io_Queue_Data *pd EINA_UNUSED, Eina_Bool close_on_invalidate EINA_UNUSED)
 {
 }
 
 EOLIAN static Eina_Bool
-_efl_io_queue_efl_io_closer_close_on_destructor_get(const Eo *o EINA_UNUSED, 
Efl_Io_Queue_Data *pd EINA_UNUSED)
+_efl_io_queue_efl_io_closer_close_on_invalidate_get(const Eo *o EINA_UNUSED, 
Efl_Io_Queue_Data *pd EINA_UNUSED)
 {
    return EINA_TRUE;
 }
diff --git a/src/lib/efl/interfaces/efl_io_queue.eo 
b/src/lib/efl/interfaces/efl_io_queue.eo
index 46bcde493f..f89c683c3e 100644
--- a/src/lib/efl/interfaces/efl_io_queue.eo
+++ b/src/lib/efl/interfaces/efl_io_queue.eo
@@ -116,6 +116,6 @@ class Efl.Io.Queue (Efl.Object, Efl.Io.Reader, 
Efl.Io.Writer, Efl.Io.Closer) {
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }
-        Efl.Io.Closer.close_on_destructor { get; set; }
+        Efl.Io.Closer.close_on_invalidate { get; set; }
     }
 }
diff --git a/src/lib/elementary/efl_ui_image.c 
b/src/lib/elementary/efl_ui_image.c
index bc274ae50d..37f1ef90ae 100644
--- a/src/lib/elementary/efl_ui_image.c
+++ b/src/lib/elementary/efl_ui_image.c
@@ -945,7 +945,7 @@ _efl_ui_image_remote_copier_cancel(Eo *obj EINA_UNUSED, 
Efl_Ui_Image_Data *sd)
    Eo *copier = sd->remote.copier;
 
    if (!copier) return;
-   /* copier is flagged as close_on_destructor, thus:
+   /* copier is flagged as close_on_invalidate, thus:
     * efl_del()
     *  -> efl_io_closer_close()
     *      -> "done" event
@@ -1056,7 +1056,7 @@ _efl_ui_image_download(Eo *obj, Efl_Ui_Image_Data *sd, 
const char *url, const ch
 
    sd->remote.copier = efl_add(EFL_IO_COPIER_CLASS, obj,
                                efl_io_copier_source_set(efl_added, dialer),
-                               
efl_io_closer_close_on_destructor_set(efl_added, EINA_TRUE),
+                               
efl_io_closer_close_on_invalidate_set(efl_added, EINA_TRUE),
                                efl_event_callback_array_add(efl_added, 
_efl_ui_image_remote_copier_cbs(), obj));
    EINA_SAFETY_ON_NULL_GOTO(sd->remote.copier, error_copier);
    eina_stringshare_replace(&sd->remote.key, key);
diff --git a/src/lib/elementary/efl_ui_image_zoomable.c 
b/src/lib/elementary/efl_ui_image_zoomable.c
index d4426aafd1..183b2712ab 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.c
+++ b/src/lib/elementary/efl_ui_image_zoomable.c
@@ -2221,7 +2221,7 @@ _efl_ui_image_zoomable_remote_copier_cancel(Eo *obj 
EINA_UNUSED, Efl_Ui_Image_Zo
    Eo *copier = sd->remote.copier;
 
    if (!copier) return;
-   /* copier is flagged as close_on_destructor, thus:
+   /* copier is flagged as close_on_invalidate, thus:
     * efl_del()
     *  -> efl_io_closer_close()
     *      -> "done" event
@@ -2323,7 +2323,7 @@ _efl_ui_image_zoomable_download(Eo *obj, 
Efl_Ui_Image_Zoomable_Data *sd, const c
 
    sd->remote.copier = efl_add(EFL_IO_COPIER_CLASS, obj,
                                efl_io_copier_source_set(efl_added, dialer),
-                               
efl_io_closer_close_on_destructor_set(efl_added, EINA_TRUE),
+                               
efl_io_closer_close_on_invalidate_set(efl_added, EINA_TRUE),
                                efl_event_callback_array_add(efl_added, 
_efl_ui_image_zoomable_remote_copier_cbs(), obj));
    EINA_SAFETY_ON_NULL_GOTO(sd->remote.copier, error_copier);
 
diff --git a/src/tests/ecore_con/ecore_con_test_ecore_con_eet.c 
b/src/tests/ecore_con/ecore_con_test_ecore_con_eet.c
index 8cedac0d1e..45778f8ba8 100644
--- a/src/tests/ecore_con/ecore_con_test_ecore_con_eet.c
+++ b/src/tests/ecore_con/ecore_con_test_ecore_con_eet.c
@@ -70,8 +70,6 @@ _eet_data_cb(void *data EINA_UNUSED, Ecore_Con_Reply *reply, 
const char *protoco
    char toSend[] = SRV_MSG;
    ECE_Test *received = value;
 
-   fprintf(stderr, "id: %d\n message: %s\n",
-           received->id, received->message);
    fail_if(strcmp(received->message, CLI_MSG));
    fail_if(received->id != 1);
 

-- 


Reply via email to