Imported Upstream version 1.7.8
[platform/upstream/ecore.git] / src / lib / ecore_con / ecore_con.c
index 0a652ad..01c9767 100644 (file)
@@ -371,6 +371,7 @@ ecore_con_server_add(Ecore_Con_Type compl_type,
    if (!svr->name)
      goto error;
 
+   svr->start_time = ecore_time_get();
    svr->type = compl_type;
    svr->port = port;
    svr->data = (void *)data;
@@ -561,6 +562,8 @@ ecore_con_server_timeout_set(Ecore_Con_Server *svr,
      svr->client_disconnect_time = timeout;
    else
      svr->disconnect_time = timeout;
+
+   _ecore_con_server_timer_update(svr);
 }
 
 EAPI double
@@ -1121,6 +1124,7 @@ ecore_con_event_client_add(Ecore_Con_Client *cl)
    cl->event_count = eina_list_append(cl->event_count, e);
    cl->host_server->event_count = eina_list_append(cl->host_server->event_count, e);
    _ecore_con_cl_timer_update(cl);
+   cl->start_time = ecore_time_get();
    e->client = cl;
    if (cl->upgrade) ev = ECORE_CON_EVENT_CLIENT_UPGRADE;
    ecore_event_add(ev, e,
@@ -1335,6 +1339,7 @@ _ecore_con_client_free(Ecore_Con_Client *cl)
           }
      }
    cl->host_server->clients = eina_list_remove(cl->host_server->clients, cl);
+   --cl->host_server->client_count;
 
 #ifdef _WIN32
    ecore_con_local_win32_client_del(cl);
@@ -1383,7 +1388,10 @@ _ecore_con_server_timer_update(Ecore_Con_Server *svr)
         if (svr->disconnect_time > 0)
           {
              if (svr->until_deletion)
-               ecore_timer_interval_set(svr->until_deletion, svr->disconnect_time);
+               {
+                  ecore_timer_interval_set(svr->until_deletion, svr->disconnect_time);
+                  ecore_timer_reset(svr->until_deletion);
+               }
              else
                svr->until_deletion = ecore_timer_add(svr->disconnect_time, (Ecore_Task_Cb)_ecore_con_server_timer, svr);
           }
@@ -1420,7 +1428,10 @@ _ecore_con_cl_timer_update(Ecore_Con_Client *cl)
         if (cl->disconnect_time > 0)
           {
              if (cl->until_deletion)
-               ecore_timer_interval_set(cl->until_deletion, cl->disconnect_time);
+               {
+                  ecore_timer_interval_set(cl->until_deletion, cl->disconnect_time);
+                  ecore_timer_reset(cl->until_deletion);
+               }
              else
                cl->until_deletion = ecore_timer_add(cl->disconnect_time, (Ecore_Task_Cb)_ecore_con_client_timer, cl);
           }
@@ -1435,7 +1446,10 @@ _ecore_con_cl_timer_update(Ecore_Con_Client *cl)
         if (cl->host_server->client_disconnect_time > 0)
           {
              if (cl->until_deletion)
-               ecore_timer_interval_set(cl->until_deletion, cl->host_server->client_disconnect_time);
+               {
+                  ecore_timer_interval_set(cl->until_deletion, cl->host_server->client_disconnect_time);
+                  ecore_timer_reset(cl->until_deletion);
+               }
              else
                cl->until_deletion = ecore_timer_add(cl->host_server->client_disconnect_time, (Ecore_Task_Cb)_ecore_con_client_timer, cl);
           }