gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r17497 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r17497 - gnunet/src/ats
Date: Fri, 14 Oct 2011 15:57:31 +0200

Author: wachs
Date: 2011-10-14 15:57:31 +0200 (Fri, 14 Oct 2011)
New Revision: 17497

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_addresses.h
   gnunet/src/ats/gnunet-service-ats_scheduling.c
   gnunet/src/ats/test_ats_api.conf
Log:
remove addresses on client disconnect


Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2011-10-14 13:05:32 UTC 
(rev 17496)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2011-10-14 13:57:31 UTC 
(rev 17497)
@@ -61,6 +61,13 @@
   struct ATS_Address * result;
 };
 
+static void
+destroy_address (struct ATS_Address * addr)
+{
+  GNUNET_free_non_null (addr->ats);
+  GNUNET_free (addr->plugin);
+  GNUNET_free (addr);
+}
 
 static int 
 compare_address_it (void *cls,
@@ -107,6 +114,7 @@
 static void
 merge_ats (struct ATS_Address * dest, struct ATS_Address * source)
 {
+  /*
   int c_src = 0;
   int c_dest = 0;
   struct GNUNET_TRANSPORT_ATS_Information * a_src = source->ats;
@@ -131,6 +139,7 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
     "Have %u entries to update and %u new entries\n",bigger->ats_count,
     new_entries);
+    */
 }
 
 void
@@ -176,15 +185,38 @@
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
       "Updated existing address for peer `%s' %X \n",
       GNUNET_i2s (peer), old);
-    GNUNET_free (aa->ats);
-    GNUNET_free (aa->plugin);
-    GNUNET_free (aa);
+    destroy_address (aa);
   }
 
 }
 
+static int
+remove_client (void *cls,
+               const GNUNET_HashCode * key,
+               void *value)
+{
+  struct GNUNET_SERVER_Client *client = cls;
+  struct ATS_Address * aa = (struct ATS_Address * ) value;
 
+  if (aa->session_client == client)
+  {
+    GNUNET_CONTAINER_multihashmap_remove(addresses, key, value);
+    destroy_address (aa);
+  }
+  return GNUNET_OK;
+}
+
+
+
 void
+GAS_address_client_disconnected (struct GNUNET_SERVER_Client *client)
+{
+  if (addresses != NULL)
+    GNUNET_CONTAINER_multihashmap_iterate(addresses, &remove_client, client);
+}
+
+
+void
 GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer,
                       const char *plugin_name,
                       const void *plugin_addr, size_t plugin_addr_len,
@@ -214,10 +246,8 @@
     GNUNET_i2s (peer));
 
   GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, 
&peer->hashPubKey, res));
-  GNUNET_free (res->plugin);
-  GNUNET_free_non_null (res->ats);
-  GNUNET_free (res);
-
+  destroy_address (aa);
+  destroy_address (res);
 }
 
 
@@ -258,9 +288,8 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
     "Freeing address for peer `%s' %X\n",
     GNUNET_i2s (&aa->peer), aa);
-  GNUNET_free (aa->plugin);
-  GNUNET_free_non_null (aa->ats);
-  GNUNET_free (aa);
+  GNUNET_CONTAINER_multihashmap_remove (addresses, key, value);
+  destroy_address (aa);
   return GNUNET_OK;
 }
 
@@ -274,6 +303,7 @@
 {
   GNUNET_CONTAINER_multihashmap_iterate (addresses, &free_address_it, NULL);
   GNUNET_CONTAINER_multihashmap_destroy (addresses);
+  addresses = NULL;
 }
 
 

Modified: gnunet/src/ats/gnunet-service-ats_addresses.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.h       2011-10-14 13:05:32 UTC 
(rev 17496)
+++ gnunet/src/ats/gnunet-service-ats_addresses.h       2011-10-14 13:57:31 UTC 
(rev 17497)
@@ -61,6 +61,8 @@
                       struct GNUNET_SERVER_Client *session_client,
                       uint32_t session_id);
 
+void
+GAS_address_client_disconnected (struct GNUNET_SERVER_Client *session_client);
 
 // FIXME: this function should likely end up in the LP-subsystem and
 // not with 'addresses' in the future...

Modified: gnunet/src/ats/gnunet-service-ats_scheduling.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_scheduling.c      2011-10-14 13:05:32 UTC 
(rev 17496)
+++ gnunet/src/ats/gnunet-service-ats_scheduling.c      2011-10-14 13:57:31 UTC 
(rev 17497)
@@ -112,6 +112,7 @@
 }
 
 
+
 /**
  * Unregister a client (which may have been a scheduling client,
  * but this is not assured).
@@ -127,6 +128,7 @@
   if (NULL == sc)
     return;
   GNUNET_CONTAINER_DLL_remove (sc_head, sc_tail, sc);
+  GAS_address_client_disconnected (client);
   GNUNET_SERVER_client_drop (client);
   GNUNET_free (sc);
 }

Modified: gnunet/src/ats/test_ats_api.conf
===================================================================
--- gnunet/src/ats/test_ats_api.conf    2011-10-14 13:05:32 UTC (rev 17496)
+++ gnunet/src/ats/test_ats_api.conf    2011-10-14 13:57:31 UTC (rev 17497)
@@ -8,7 +8,7 @@
 
 [ats]
 DEBUG = YES
-#PREFIX = valgrind --leak-check=full
+PREFIX = valgrind --leak-check=full
 AUTOSTART = YES
 PORT = 12002
 HOSTNAME = localhost




reply via email to

[Prev in Thread] Current Thread [Next in Thread]