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
This commit is contained in:
Mike Blumenkrantz 2020-03-12 12:16:37 -04:00
parent 592ca5ea3b
commit 65b081394d
1 changed files with 7 additions and 5 deletions

View File

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