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
devs/bu5hm4n/fix
Carsten Haitzler 5 years ago
parent 10c4a25aa8
commit 1bdadff6c3
  1. 27
      src/bin/e_fm.c
  2. 1
      src/bin/e_fm.h
  3. 2
      src/bin/e_fm/e_fm_main_eeze.c
  4. 17
      src/bin/e_sys.c

@ -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;
}

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

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

@ -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());

Loading…
Cancel
Save