Refactoring the exe exit stuff.

SVN revision: 19844
This commit is contained in:
David Walter Seikel 2006-01-16 03:20:36 +00:00
parent e109255415
commit e754564803
4 changed files with 50 additions and 61 deletions

View File

@ -455,27 +455,6 @@ _ecore_event_call(void)
}
}
#ifndef WIN32
void *
_ecore_event_exe_exit_new(void)
{
Ecore_Exe_Event_Del *e;
e = calloc(1, sizeof(Ecore_Exe_Event_Del));
return e;
}
void
_ecore_event_exe_exit_free(void *data __UNUSED__, void *ev)
{
Ecore_Exe_Event_Del *e;
e = ev;
if (e->exe) _ecore_exe_free(e->exe);
free(e);
}
#endif
EAPI void *
_ecore_event_signal_user_new(void)
{

View File

@ -411,7 +411,7 @@ ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data)
if (!ok)
{ /* Something went wrong, so pull down everything. */
if (exe->pid) ecore_exe_terminate(exe);
IF_FN_DEL(_ecore_exe_free, exe);
IF_FN_DEL(ecore_exe_free, exe);
}
else
{
@ -535,13 +535,36 @@ ecore_exe_tag_get(Ecore_Exe *exe)
EAPI void *
ecore_exe_free(Ecore_Exe *exe)
{
void *data;
int ok = 0;
int result;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE,
"ecore_exe_free");
return NULL;
}
return _ecore_exe_free(exe);
data = exe->data;
IF_FN_DEL(ecore_timer_del, exe->doomsday_clock);
IF_FN_DEL(ecore_main_fd_handler_del, exe->write_fd_handler);
IF_FN_DEL(ecore_main_fd_handler_del, exe->read_fd_handler);
IF_FN_DEL(ecore_main_fd_handler_del, exe->error_fd_handler);
if (exe->child_fd_write) E_NO_ERRNO(result, close(exe->child_fd_write), ok);
if (exe->child_fd_read) E_NO_ERRNO(result, close(exe->child_fd_read), ok);
if (exe->child_fd_error) E_NO_ERRNO(result, close(exe->child_fd_error), ok);
IF_FREE(exe->write_data_buf);
IF_FREE(exe->read_data_buf);
IF_FREE(exe->error_data_buf);
IF_FREE(exe->cmd);
exes = _ecore_list2_remove(exes, exe);
ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE);
IF_FREE(exe->tag);
free(exe);
return data;
}
/**
@ -822,7 +845,7 @@ _ecore_exe_init(void)
void
_ecore_exe_shutdown(void)
{
while (exes) _ecore_exe_free(exes);
while (exes) ecore_exe_free(exes);
}
Ecore_Exe *
@ -931,35 +954,6 @@ _ecore_exe_exec_it(const char *exe_cmd)
return;
}
void *
_ecore_exe_free(Ecore_Exe *exe)
{
void *data;
int ok = 0;
int result;
data = exe->data;
IF_FN_DEL(ecore_timer_del, exe->doomsday_clock);
IF_FN_DEL(ecore_main_fd_handler_del, exe->write_fd_handler);
IF_FN_DEL(ecore_main_fd_handler_del, exe->read_fd_handler);
IF_FN_DEL(ecore_main_fd_handler_del, exe->error_fd_handler);
if (exe->child_fd_write) E_NO_ERRNO(result, close(exe->child_fd_write), ok);
if (exe->child_fd_read) E_NO_ERRNO(result, close(exe->child_fd_read), ok);
if (exe->child_fd_error) E_NO_ERRNO(result, close(exe->child_fd_error), ok);
IF_FREE(exe->write_data_buf);
IF_FREE(exe->read_data_buf);
IF_FREE(exe->error_data_buf);
IF_FREE(exe->cmd);
exes = _ecore_list2_remove(exes, exe);
ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE);
IF_FREE(exe->tag);
free(exe);
return data;
}
static int
_ecore_exe_data_generic_handler(void *data, Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_Flags flags)
{
@ -1250,4 +1244,23 @@ _ecore_exe_event_add_free(void *data __UNUSED__, void *ev)
e = ev;
free(e);
}
void *
_ecore_exe_event_del_new(void)
{
Ecore_Exe_Event_Del *e;
e = calloc(1, sizeof(Ecore_Exe_Event_Del));
return e;
}
void
_ecore_exe_event_del_free(void *data __UNUSED__, void *ev)
{
Ecore_Exe_Event_Del *e;
e = ev;
if (e->exe) ecore_exe_free(e->exe);
free(e);
}
#endif

View File

@ -390,10 +390,6 @@ Ecore_Event *_ecore_event_add(int type, void *ev, void (*func_free) (void *data
void *_ecore_event_del(Ecore_Event *event);
void _ecore_event_call(void);
#ifndef WIN32
void *_ecore_event_exe_exit_new(void);
void _ecore_event_exe_exit_free(void *data, void *ev);
#endif
EAPI void *_ecore_event_signal_user_new(void);
void *_ecore_event_signal_hup_new(void);
void *_ecore_event_signal_exit_new(void);
@ -411,7 +407,8 @@ void _ecore_signal_call(void);
void _ecore_exe_init(void);
void _ecore_exe_shutdown(void);
Ecore_Exe *_ecore_exe_find(pid_t pid);
void *_ecore_exe_free(Ecore_Exe *exe);
void *_ecore_exe_event_del_new(void);
void _ecore_exe_event_del_free(void *data, void *ev);
#endif
void _ecore_animator_shutdown(void);

View File

@ -167,7 +167,7 @@ _ecore_signal_call(void)
/* FIXME: If this process is set respawn, respawn with a suitable backoff
* period for those that need too much respawning.
*/
e = _ecore_event_exe_exit_new();
e = _ecore_exe_event_del_new();
if (e)
{
if (WIFEXITED(status))
@ -218,7 +218,7 @@ _ecore_signal_call(void)
{
if (e->exe) printf("Sending exit event for %s.\n", e->exe->cmd);
_ecore_event_add(ECORE_EXE_EVENT_DEL, e,
_ecore_event_exe_exit_free, NULL);
_ecore_exe_event_del_free, NULL);
}
}
}
@ -505,7 +505,7 @@ _ecore_signal_exe_exit_delay(void *data)
{
printf("Sending delayed exit event for %s.\n", e->exe->cmd);
_ecore_event_add(ECORE_EXE_EVENT_DEL, e,
_ecore_event_exe_exit_free, NULL);
_ecore_exe_event_del_free, NULL);
}
return 0;
}