[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r17497 - gnunet/src/ats,
gnunet <=