fix ecore-con tracking of event count lists for clients!!! thanks
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 28 Nov 2011 12:06:50 +0000 (12:06 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 28 Nov 2011 12:06:50 +0000 (12:06 +0000)
valgrind!

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@65647 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_con/ecore_con.c

index 0d9345a..7bd0358 100644 (file)
@@ -2365,15 +2365,15 @@ _ecore_con_event_client_add_free(Ecore_Con_Server *svr,
    e = ev;
    if (e->client)
      {
-        e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e);
-        if ((!e->client->event_count) && (e->client->delete_me))
-          ecore_con_client_del(e->client);
+        e->client->event_count = eina_list_remove(e->client->event_count, e);
         if (e->client->host_server)
           {
              e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
              if ((!svr->event_count) && (svr->delete_me))
                _ecore_con_server_free(svr);
           }
+        if ((!e->client->event_count) && (e->client->delete_me))
+          ecore_con_client_del(e->client);
      }
 
    ecore_con_event_client_add_free(e);
@@ -2391,15 +2391,15 @@ _ecore_con_event_client_del_free(Ecore_Con_Server *svr,
    e = ev;
    if (e->client)
      {
-        e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e);
-        if ((!e->client->event_count) && (e->client->delete_me))
-          ecore_con_client_del(e->client);
+        e->client->event_count = eina_list_remove(e->client->event_count, e);
         if (e->client->host_server)
           {
              e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
              if ((!svr->event_count) && (svr->delete_me))
                _ecore_con_server_free(svr);
           }
+        if ((!e->client->event_count) && (e->client->delete_me))
+          ecore_con_client_del(e->client);
      }
    ecore_con_event_client_del_free(e);
    _ecore_con_event_count--;
@@ -2413,18 +2413,18 @@ _ecore_con_event_client_write_free(Ecore_Con_Server *svr,
 {
    if (e->client)
      {
-        e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e);
-        if (((!e->client->event_count) && (e->client->delete_me)) ||
-            ((e->client->host_server &&
-              ((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP ||
-               (e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST))))
-          ecore_con_client_del(e->client);
+        e->client->event_count = eina_list_remove(e->client->event_count, e);
         if (e->client->host_server)
           {
              e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e);
              if ((!svr->event_count) && (svr->delete_me))
                _ecore_con_server_free(svr);
           }
+        if (((!e->client->event_count) && (e->client->delete_me)) ||
+            ((e->client->host_server &&
+              ((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP ||
+               (e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST))))
+          ecore_con_client_del(e->client);
      }
    ecore_con_event_client_write_free(e);
    _ecore_con_event_count--;
@@ -2441,15 +2441,18 @@ _ecore_con_event_client_data_free(Ecore_Con_Server *svr,
    e = ev;
    if (e->client)
      {
-        e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, e);
+        e->client->event_count = eina_list_remove(e->client->event_count, e);
+        if (e->client->host_server)
+          {
+             e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
+          }
+        if ((!svr->event_count) && (svr->delete_me))
+          _ecore_con_server_free(svr);
         if (((!e->client->event_count) && (e->client->delete_me)) ||
             ((e->client->host_server &&
               ((e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_UDP ||
                (e->client->host_server->type & ECORE_CON_TYPE) == ECORE_CON_REMOTE_MCAST))))
           ecore_con_client_del(e->client);
-        e->client->host_server->event_count = eina_list_remove(e->client->host_server->event_count, ev);
-        if ((!svr->event_count) && (svr->delete_me))
-          _ecore_con_server_free(svr);
      }
    free(e->data);
    ecore_con_event_client_data_free(e);