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) { --