From 892861da0a4ec2f19179922d52a851e7d9dc2f9d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 12 Jun 2012 07:57:40 +0000 Subject: [PATCH] efm ipc now only tries to handle its own events instead of trying to take over the world SVN revision: 71987 --- src/bin/e_fm/e_fm_ipc.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/bin/e_fm/e_fm_ipc.c b/src/bin/e_fm/e_fm_ipc.c index 13034d78d..3df9fb04a 100644 --- a/src/bin/e_fm/e_fm_ipc.c +++ b/src/bin/e_fm/e_fm_ipc.c @@ -840,7 +840,7 @@ _e_fm_ipc_slave_send(E_Fm_Slave *slave, E_Fm_Op_Type type, void *data, int size) } Eina_Bool -_e_fm_ipc_slave_data_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_fm_ipc_slave_data_cb(void *data, int type __UNUSED__, void *event) { Ecore_Exe_Event_Data *e = event; E_Fm_Slave *slave; @@ -852,6 +852,8 @@ _e_fm_ipc_slave_data_cb(void *data __UNUSED__, int type __UNUSED__, void *event) slave = ecore_exe_data_get(e->exe); if (!slave) return ECORE_CALLBACK_RENEW; + if (data) return ECORE_CALLBACK_PASS_ON; /* ipc handlers have NULL data */ + if (!eina_list_data_find(_e_fm_ipc_slaves, slave)) return ECORE_CALLBACK_PASS_ON; sdata = e->data; ssize = e->size; @@ -893,7 +895,7 @@ _e_fm_ipc_slave_data_cb(void *data __UNUSED__, int type __UNUSED__, void *event) } Eina_Bool -_e_fm_ipc_slave_error_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_fm_ipc_slave_error_cb(void *data, int type __UNUSED__, void *event) { Ecore_Exe_Event_Data *e = event; E_Fm_Slave *slave; @@ -902,6 +904,8 @@ _e_fm_ipc_slave_error_cb(void *data __UNUSED__, int type __UNUSED__, void *event slave = ecore_exe_data_get(e->exe); if (!slave) return ECORE_CALLBACK_RENEW; + if (data) return ECORE_CALLBACK_PASS_ON; /* ipc handlers have NULL data */ + if (!eina_list_data_find(_e_fm_ipc_slaves, slave)) return ECORE_CALLBACK_PASS_ON; printf("EFM: Data from STDERR of slave #%d: %.*s", slave->id, e->size, (char *)e->data); @@ -909,21 +913,25 @@ _e_fm_ipc_slave_error_cb(void *data __UNUSED__, int type __UNUSED__, void *event } Eina_Bool -_e_fm_ipc_slave_del_cb(void *data __UNUSED__, int type __UNUSED__, void *event) +_e_fm_ipc_slave_del_cb(void *data, int type __UNUSED__, void *event) { Ecore_Exe_Event_Del *e = event; E_Fm_Slave *slave; + Eina_List *l; - if (!e) return 1; + if (!e) return ECORE_CALLBACK_RENEW; slave = ecore_exe_data_get(e->exe); - if (!slave) return 1; + if (!slave) return ECORE_CALLBACK_RENEW; + if (data) return ECORE_CALLBACK_PASS_ON; /* ipc handlers have NULL data */ + l = eina_list_data_find_list(_e_fm_ipc_slaves, slave); + if (!l) return ECORE_CALLBACK_PASS_ON; _e_fm_ipc_client_send(slave->id, E_FM_OP_QUIT, NULL, 0); - _e_fm_ipc_slaves = eina_list_remove(_e_fm_ipc_slaves, (void *)slave); + _e_fm_ipc_slaves = eina_list_remove(_e_fm_ipc_slaves, l); free(slave); - return 1; + return ECORE_CALLBACK_RENEW; } static void