zmike pushed a commit to branch master.

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

commit 65b081394dc421dd6d2283213f8cf0c7c6dd4748
Author: Mike Blumenkrantz <zm...@samsung.com>
Date:   Thu Mar 12 12:16:37 2020 -0400

    efl/exe: don't err on del if exe has been killed
    
    Summary:
    the point of this err is to inform the user that their exe is (possibly) 
dangling,
    but if the user just wants to ignore the exit callback this isn't a problem
    Depends on D11496
    
    Reviewers: segfaultxavi
    
    Reviewed By: segfaultxavi
    
    Subscribers: segfaultxavi, cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D11497
---
 src/lib/ecore/efl_exe.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c
index 1cb0276205..c5a2f57343 100644
--- a/src/lib/ecore/efl_exe.c
+++ b/src/lib/ecore/efl_exe.c
@@ -69,6 +69,7 @@ struct _Efl_Exe_Data
    } fd;
 #endif
    Eina_Bool exit_called : 1;
+   Eina_Bool exit_signalled : 1;
    Eina_Bool run : 1;
 };
 
@@ -269,10 +270,10 @@ _efl_exe_signal(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd, 
Efl_Exe_Signal sig)
 
    switch (sig)
      {
-      case EFL_EXE_SIGNAL_INT:  s = SIGINT;  break;
-      case EFL_EXE_SIGNAL_QUIT: s = SIGQUIT; break;
-      case EFL_EXE_SIGNAL_TERM: s = SIGTERM; break;
-      case EFL_EXE_SIGNAL_KILL: s = SIGKILL; break;
+      case EFL_EXE_SIGNAL_INT:  s = SIGINT;  pd->exit_signalled = EINA_TRUE; 
break;
+      case EFL_EXE_SIGNAL_QUIT: s = SIGQUIT; pd->exit_signalled = EINA_TRUE; 
break;
+      case EFL_EXE_SIGNAL_TERM: s = SIGTERM; pd->exit_signalled = EINA_TRUE; 
break;
+      case EFL_EXE_SIGNAL_KILL: s = SIGKILL; pd->exit_signalled = EINA_TRUE; 
break;
       case EFL_EXE_SIGNAL_CONT: s = SIGCONT; break;
       case EFL_EXE_SIGNAL_STOP: s = SIGSTOP; break;
       case EFL_EXE_SIGNAL_HUP:  s = SIGHUP;  break;
@@ -581,6 +582,7 @@ _efl_exe_efl_task_end(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd)
 #ifdef _WIN32
 #else
    if (pd->pid == -1) return;
+   pd->exit_signalled = EINA_TRUE;
    kill(pd->pid, SIGINT);
 #endif
 }
@@ -623,7 +625,7 @@ _efl_exe_efl_object_destructor(Eo *obj, Efl_Exe_Data *pd)
 {
 #ifdef _WIN32
 #else
-   if (!pd->exit_called)
+   if ((!pd->exit_called) && (!pd->exit_signalled))
      ERR("Exe being destroyed while child has not exited yet.");
    if (pd->fd.exited_read >= 0)
      {

-- 


Reply via email to