forked from enlightenment/efl
efreet cache - handle corner case where efreetd keeps disconnecting
so an odd one. there is a socket, but nothing is actually listening on it, but clients keep spinning launching efreetd's because the launch, connect, then get a disconnect and try again immediately keeping things spinning heavily, so add a delay of 0.5 sec before launchnig another efreetd if the launch + connect fails and gets a disconnect within 0.5 sec ... so give up for 0.5 sec before trying again to avoid a runaway system. @fix
This commit is contained in:
parent
44a70ab98c
commit
a6f7b0f834
|
@ -132,11 +132,13 @@ _cb_server_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Ecore_Timer *reconnect_timer = NULL;
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_cb_server_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
_cb_server_reconnect(void *data EINA_UNUSED)
|
||||||
{
|
{
|
||||||
IPC_HEAD(Del);
|
if (reconnect_timer) ecore_timer_del(reconnect_timer);
|
||||||
ipc = NULL;
|
reconnect_timer = NULL;
|
||||||
_ipc_launch();
|
_ipc_launch();
|
||||||
if (ipc)
|
if (ipc)
|
||||||
{
|
{
|
||||||
|
@ -148,6 +150,25 @@ _cb_server_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
ecore_ipc_server_send(ipc, 1, 0, 0, 0, 0, s, len);
|
ecore_ipc_server_send(ipc, 1, 0, 0, 0, 0, s, len);
|
||||||
efreet_icon_extensions_refresh();
|
efreet_icon_extensions_refresh();
|
||||||
}
|
}
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_cb_server_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
|
{
|
||||||
|
static double last_del = 0.0;
|
||||||
|
double t;
|
||||||
|
IPC_HEAD(Del);
|
||||||
|
ipc = NULL;
|
||||||
|
t = ecore_time_get();
|
||||||
|
if ((t - last_del) < 0.5)
|
||||||
|
{
|
||||||
|
if (reconnect_timer) ecore_timer_del(reconnect_timer);
|
||||||
|
reconnect_timer = ecore_timer_add(0.5, _cb_server_reconnect, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_cb_server_reconnect(NULL);
|
||||||
|
last_del = t;
|
||||||
return ECORE_CALLBACK_DONE;
|
return ECORE_CALLBACK_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue