efm - make enlightenment_fm and eeze_scanner die with parent

be both explicit in killing it off on shutdown as well as using die
with parent flags as well. this seems ot have fixed or reduced the
"system cant shut down some job still alive in some session" problem.

@fix
This commit is contained in:
Carsten Haitzler 2019-06-05 17:28:09 +01:00
parent 10c4a25aa8
commit 1bdadff6c3
4 changed files with 40 additions and 7 deletions

View File

@ -479,6 +479,7 @@ static void _e_fm2_thread_cleanup_cb(void *d, Ecore_Thread *et);
static void _e_fm2_new_file(void *data, E_Menu *m, E_Menu_Item *mi);
static Ecore_Exe *_e_fm2_exe = NULL;
static char *_e_fm2_meta_path = NULL;
static Evas_Smart *_e_fm2_smart = NULL;
static Eina_List *_e_fm2_list = NULL;
@ -750,6 +751,14 @@ _e_fm2_op_registry_entry_print(const E_Fm2_Op_Registry_Entry *ere)
ere->src, ere->dst);
}
static Eina_Bool
_e_fm2_exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
Ecore_Exe_Event_Del *ev = event;
if (ev->exe == _e_fm2_exe) _e_fm2_exe = NULL;
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_e_fm2_op_registry_entry_add_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
@ -840,6 +849,7 @@ e_fm2_init(void)
_e_fm2_thread_cleanup_cb,
_e_fm2_thread_cleanup_cb, NULL);
E_LIST_HANDLER_APPEND(_e_fm_handlers, ECORE_EXE_EVENT_DEL, _e_fm2_exe_del, NULL);
/// DBG
E_LIST_HANDLER_APPEND(_e_fm_handlers, E_EVENT_FM_OP_REGISTRY_ADD, _e_fm2_op_registry_entry_add_cb, NULL);
E_LIST_HANDLER_APPEND(_e_fm_handlers, E_EVENT_FM_OP_REGISTRY_DEL, _e_fm2_op_registry_entry_del_cb, NULL);
@ -854,6 +864,8 @@ e_fm2_init(void)
EINTERN int
e_fm2_shutdown(void)
{
e_fm2_die();
E_FREE_LIST(_e_fm2_list, evas_object_del);
eina_stringshare_replace(&_e_fm2_icon_desktop_str, NULL);
@ -887,6 +899,17 @@ e_fm2_shutdown(void)
return 1;
}
E_API void
e_fm2_die(void)
{
if (_e_fm2_exe)
{
ecore_exe_kill(_e_fm2_exe);
ecore_exe_free(_e_fm2_exe);
_e_fm2_exe = NULL;
}
}
E_API Evas_Object *
e_fm2_add(Evas *evas)
{
@ -2391,8 +2414,10 @@ _e_fm2_client_spawn(void)
char buf[4096];
if (_e_fm2_client_spawning) return;
if (e_sys_on_the_way_out_get()) return;
snprintf(buf, sizeof(buf), "%s/enlightenment/utils/enlightenment_fm", e_prefix_lib_get());
ecore_exe_run(buf, NULL);
if (_e_fm2_exe) e_fm2_die();
_e_fm2_exe = ecore_exe_pipe_run(buf, ECORE_EXE_NOT_LEADER | ECORE_EXE_TERM_WITH_PARENT, NULL);
_e_fm2_client_spawning = 1;
}

View File

@ -150,6 +150,7 @@ typedef void (*E_Fm_Cb)(void *data, Evas_Object *obj, E_Menu *m, E_Fm2_Icon_Info
EINTERN int e_fm2_init(void);
EINTERN int e_fm2_shutdown(void);
E_API void e_fm2_die(void);
E_API Evas_Object *e_fm2_add(Evas *evas);
E_API void e_fm2_path_set(Evas_Object *obj, const char *dev, const char *path);
E_API void e_fm2_custom_theme_set(Evas_Object *obj, const char *path);

View File

@ -654,7 +654,7 @@ _scanner_run(void)
{
static int count;
scanner = ecore_exe_pipe_run("eeze_scanner", ECORE_EXE_NOT_LEADER, pfx);
scanner = ecore_exe_pipe_run("eeze_scanner", ECORE_EXE_NOT_LEADER | ECORE_EXE_TERM_WITH_PARENT, pfx);
if (!scanner)
if (++count == 3)
_e_fm_main_catch(EFM_MODE_USING_RASTER_MOUNT);

View File

@ -1079,7 +1079,10 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
case E_SYS_EXIT:
// XXX TODO: check for e_fm_op_registry entries and confirm
if (!e_util_immortal_check())
ecore_main_loop_quit();
{
e_fm2_die();
ecore_main_loop_quit();
}
else
return 0;
break;
@ -1088,10 +1091,11 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
// XXX TODO: check for e_fm_op_registry entries and confirm
// FIXME: we don't share out immortal info to restarted e. :(
// if (!e_util_immortal_check())
{
restart = 1;
ecore_main_loop_quit();
}
{
e_fm2_die();
restart = 1;
ecore_main_loop_quit();
}
// else
// return 0;
break;
@ -1104,6 +1108,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
// XXX TODO: check for e_fm_op_registry entries and confirm
if (raw)
{
e_fm2_die();
_e_sys_logout_after();
}
else if (!_e_sys_comp_waiting)
@ -1116,6 +1121,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
case E_SYS_HALT_NOW:
/* shutdown -h now */
if (e_util_immortal_check()) return 0;
e_fm2_die();
snprintf(buf, sizeof(buf),
"%s/enlightenment/utils/enlightenment_sys halt",
e_prefix_lib_get());
@ -1151,6 +1157,7 @@ _e_sys_action_do(E_Sys_Action a, char *param EINA_UNUSED, Eina_Bool raw)
case E_SYS_REBOOT:
/* shutdown -r now */
if (e_util_immortal_check()) return 0;
e_fm2_die();
snprintf(buf, sizeof(buf),
"%s/enlightenment/utils/enlightenment_sys reboot",
e_prefix_lib_get());