diff --git a/src/bin/ipc.c b/src/bin/ipc.c index 5435fc15..e172f2f9 100644 --- a/src/bin/ipc.c +++ b/src/bin/ipc.c @@ -117,16 +117,17 @@ ipc_init(void) "nowm", nowm, EET_T_INT); } -void +Eina_Bool ipc_serve(void) { char *hash = _ipc_hash_get(); - if (!hash) return; + if (!hash) return EINA_FALSE; ipc = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, hash, 0, NULL); free(hash); - if (!ipc) return; + if (!ipc) return EINA_FALSE; hnd_data = ecore_event_handler_add (ECORE_IPC_EVENT_CLIENT_DATA, _ipc_cb_client_data, NULL); + return EINA_TRUE; } void diff --git a/src/bin/ipc.h b/src/bin/ipc.h index 59f3f093..76aae283 100644 --- a/src/bin/ipc.h +++ b/src/bin/ipc.h @@ -30,7 +30,7 @@ struct _Ipc_Instance void ipc_init(void); void ipc_shutdown(void); -void ipc_serve(void); +Eina_Bool ipc_serve(void); void ipc_instance_new_func_set(void (*func) (Ipc_Instance *inst)); Eina_Bool ipc_instance_add(Ipc_Instance *inst); diff --git a/src/bin/main.c b/src/bin/main.c index b3ac9ce5..e2169110 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -921,6 +921,7 @@ elm_main(int argc, char **argv) { Win *wn; Term *term; + int remote_try = 0; char *cmd = NULL; char *cd = NULL; char *theme = NULL; @@ -1209,6 +1210,7 @@ elm_main(int argc, char **argv) if (login_shell == 0xff) login_shell = EINA_FALSE; ipc_init(); +remote: if ((!single) && (config->multi_instance)) { Ipc_Instance inst; @@ -1253,7 +1255,14 @@ elm_main(int argc, char **argv) if ((!single) && (config->multi_instance)) { ipc_instance_new_func_set(main_ipc_new); - ipc_serve(); + if (!ipc_serve()) + { + if (remote_try < 1) + { + remote_try++; + goto remote; + } + } } wn = main_win_new(name, role, title, icon_name,