efl net - handle proxy helper fails better and abort proxy lookups

if proxy fails are too many then give up on queued lookups as they
likely will continue. i noticed a process continually spawning efl net
proxy helper because one queued lookup failed and could be looked up
so it kept trying again and again.

@fix
This commit is contained in:
Carsten Haitzler 2017-11-07 22:41:20 +09:00
parent a0dc0eb516
commit ede0587887
1 changed files with 15 additions and 1 deletions

View File

@ -25,6 +25,7 @@ typedef struct {
char **proxies; char **proxies;
int id; int id;
int busy; int busy;
int fails;
} Efl_Net_Proxy_Helper_Req; } Efl_Net_Proxy_Helper_Req;
typedef struct { typedef struct {
@ -205,6 +206,7 @@ static Eina_Bool
_efl_net_proxy_helper_cb_exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *info) _efl_net_proxy_helper_cb_exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *info)
{ {
Ecore_Exe_Event_Del *event = info; Ecore_Exe_Event_Del *event = info;
int min_fails = 0;
if (!_efl_net_proxy_helper_exe) return EINA_TRUE; if (!_efl_net_proxy_helper_exe) return EINA_TRUE;
if (event->exe == _efl_net_proxy_helper_exe) if (event->exe == _efl_net_proxy_helper_exe)
@ -222,10 +224,22 @@ _efl_net_proxy_helper_cb_exe_del(void *data EINA_UNUSED, int type EINA_UNUSED, v
{ {
if ((t - last_respawn) > 5.0) respawn = EINA_TRUE; if ((t - last_respawn) > 5.0) respawn = EINA_TRUE;
} }
if (respawn)
{
Eina_List *l;
Efl_Net_Proxy_Helper_Req *req;
EINA_LIST_FOREACH(_efl_net_proxy_helper_queue, l, req)
{
req->fails++;
if (req->fails > min_fails) min_fails = req->fails;
}
}
locks--; locks--;
} }
eina_spinlock_release(&_efl_net_proxy_helper_queue_lock); eina_spinlock_release(&_efl_net_proxy_helper_queue_lock);
if (respawn) if (min_fails >= 5) _efl_net_proxy_helper_cancel();
else if (respawn)
{ {
last_respawn = t; last_respawn = t;
_efl_net_proxy_helper_spawn(); _efl_net_proxy_helper_spawn();