cedric pushed a commit to branch master.

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

commit 3e648c475f8ccaa09f08e656efb1b6860a477a1b
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Mon Apr 9 16:56:36 2018 -0700

    ecore: when relying on parent relationship for lifecycle, we should not use 
efl_del in the destructor.
---
 src/lib/ecore/efl_io_buffered_stream.c  | 37 +++++++++++++--------------------
 src/lib/ecore/efl_io_buffered_stream.eo |  2 +-
 2 files changed, 15 insertions(+), 24 deletions(-)

diff --git a/src/lib/ecore/efl_io_buffered_stream.c 
b/src/lib/ecore/efl_io_buffered_stream.c
index a787283002..75af9e42b0 100644
--- a/src/lib/ecore/efl_io_buffered_stream.c
+++ b/src/lib/ecore/efl_io_buffered_stream.c
@@ -149,29 +149,8 @@ _efl_io_buffered_stream_efl_object_finalize(Eo *o, 
Efl_Io_Buffered_Stream_Data *
 }
 
 EOLIAN static void
-_efl_io_buffered_stream_efl_object_destructor(Eo *o, 
Efl_Io_Buffered_Stream_Data *pd)
+_efl_io_buffered_stream_efl_object_invalidate(Eo *o, 
Efl_Io_Buffered_Stream_Data *pd)
 {
-   if (pd->incoming)
-     {
-        efl_del(pd->incoming);
-        pd->incoming = NULL;
-     }
-   if (pd->outgoing)
-     {
-        efl_del(pd->outgoing);
-        pd->outgoing = NULL;
-     }
-   if (pd->sender)
-     {
-        efl_del(pd->sender);
-        pd->sender = NULL;
-     }
-   if (pd->receiver)
-     {
-        efl_del(pd->receiver);
-        pd->receiver = NULL;
-     }
-
    if (pd->inner_io)
      {
         efl_event_callback_array_del(pd->inner_io, 
_efl_io_buffered_stream_inner_io_cbs(), o);
@@ -182,7 +161,19 @@ _efl_io_buffered_stream_efl_object_destructor(Eo *o, 
Efl_Io_Buffered_Stream_Data
         pd->inner_io = NULL;
      }
 
-   efl_destructor(efl_super(o, MY_CLASS));
+   pd->incoming = NULL;
+   pd->outgoing = NULL;
+   pd->sender = NULL;
+   pd->receiver = NULL;
+
+   if (!pd->is_finished)
+     {
+        fprintf(stderr, "forced finish\n");
+        pd->is_finished = EINA_TRUE;
+        efl_event_callback_call(o, EFL_IO_BUFFERED_STREAM_EVENT_FINISHED, 
NULL);
+     }
+
+   efl_invalidate(efl_super(o, MY_CLASS));
 }
 
 EOLIAN static Eina_Error
diff --git a/src/lib/ecore/efl_io_buffered_stream.eo 
b/src/lib/ecore/efl_io_buffered_stream.eo
index 36d426306c..5c413aea91 100644
--- a/src/lib/ecore/efl_io_buffered_stream.eo
+++ b/src/lib/ecore/efl_io_buffered_stream.eo
@@ -247,7 +247,7 @@ class Efl.Io.Buffered_Stream (Efl.Loop_Consumer, 
Efl.Io.Reader, Efl.Io.Writer, E
 
     implements {
         Efl.Object.finalize;
-        Efl.Object.destructor;
+        Efl.Object.invalidate;
         Efl.Io.Closer.close;
         Efl.Io.Closer.closed { get; }
         Efl.Io.Closer.close_on_exec { get; set; }

-- 


Reply via email to