[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20725 - gnunet/src/gns
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20725 - gnunet/src/gns |
Date: |
Fri, 23 Mar 2012 16:45:03 +0100 |
Author: schanzen
Date: 2012-03-23 16:45:03 +0100 (Fri, 23 Mar 2012)
New Revision: 20725
Modified:
gnunet/src/gns/gnunet-service-gns.c
gnunet/src/gns/gnunet-service-gns_resolver.c
gnunet/src/gns/gnunet-service-gns_resolver.h
Log:
-fix
Modified: gnunet/src/gns/gnunet-service-gns.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns.c 2012-03-23 14:46:36 UTC (rev 20724)
+++ gnunet/src/gns/gnunet-service-gns.c 2012-03-23 15:45:03 UTC (rev 20725)
@@ -155,6 +155,16 @@
static struct GNUNET_TIME_Relative default_lookup_timeout;
/**
+ * Continue shutdown
+ */
+static void
+on_resolver_cleanup(void)
+{
+ GNUNET_NAMESTORE_disconnect(namestore_handle, 1);
+ GNUNET_DHT_disconnect(dht_handle);
+}
+
+/**
* Task run during shutdown.
*
* @param cls unused
@@ -173,10 +183,8 @@
GNUNET_SERVER_notification_context_destroy (nc);
gns_interceptor_stop();
- gns_resolver_cleanup();
+ gns_resolver_cleanup(&on_resolver_cleanup);
- GNUNET_NAMESTORE_disconnect(namestore_handle, 1);
- GNUNET_DHT_disconnect(dht_handle);
}
Modified: gnunet/src/gns/gnunet-service-gns_resolver.c
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.c 2012-03-23 14:46:36 UTC
(rev 20724)
+++ gnunet/src/gns/gnunet-service-gns_resolver.c 2012-03-23 15:45:03 UTC
(rev 20725)
@@ -182,6 +182,7 @@
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"GNS_GET_AUTH: dht lookup for query PSEU timed out.\n");
GNUNET_DHT_get_stop (gph->get_handle);
+ gph->get_handle = NULL;
process_pseu_result(gph, NULL);
}
@@ -234,6 +235,7 @@
/* stop lookup and timeout task */
GNUNET_DHT_get_stop (gph->get_handle);
+ gph->get_handle = NULL;
GNUNET_SCHEDULER_cancel(gph->timeout);
gph->get_handle = NULL;
@@ -333,7 +335,8 @@
&handle_auth_discovery_timeout, gph);
xquery = htonl(GNUNET_GNS_RECORD_PSEU);
-
+
+ GNUNET_assert(gph->get_handle == NULL);
gph->get_handle = GNUNET_DHT_get_start(dht_handle,
GNUNET_TIME_UNIT_FOREVER_REL,
GNUNET_BLOCK_TYPE_GNS_NAMERECORD,
@@ -416,7 +419,7 @@
/**
* Cleanup background lookups
*
- * @param cks closure to iterator
+ * @param cls closure to iterator
* @param node heap nodes
* @param element the resolver handle
* @param cost heap cost
@@ -429,13 +432,21 @@
GNUNET_CONTAINER_HeapCostType cost)
{
struct ResolverHandle *rh = (struct ResolverHandle *)element;
+ ResolverCleanupContinuation cont = cls;
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"GNS_CLEANUP: Terminating background lookup for %s\n",
rh->name);
GNUNET_DHT_get_stop(rh->get_handle);
+ rh->get_handle = NULL;
rh->proc(rh->proc_cls, rh, 0, NULL);
+ GNUNET_CONTAINER_heap_remove_node(node);
+
+ if (GNUNET_CONTAINER_heap_get_size(dht_lookup_heap) == 0)
+ cont();
+
+
return GNUNET_YES;
}
@@ -444,18 +455,18 @@
* Shutdown resolver
*/
void
-gns_resolver_cleanup()
+gns_resolver_cleanup(ResolverCleanupContinuation cont)
{
unsigned int s = GNUNET_CONTAINER_heap_get_size(dht_lookup_heap);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"GNS_CLEANUP: %d pending background queries to terminate\n", s);
if (0 != s)
- {
GNUNET_CONTAINER_heap_iterate (dht_lookup_heap,
&cleanup_pending_background_queries,
- NULL);
- }
+ cont);
+ else
+ cont();
}
@@ -537,7 +548,7 @@
{
//We could do sth verbose/more useful here but it doesn't make any difference
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "GNS_BG: background dht lookup finished.\n");
+ "GNS_BG: background dht lookup for finished.\n");
}
/**
@@ -578,6 +589,7 @@
rh->timeout_task = GNUNET_SCHEDULER_NO_TASK;
GNUNET_DHT_get_stop (rh->get_handle);
+ rh->get_handle = NULL;
rh->proc(rh->proc_cls, rh, 0, NULL);
}
@@ -631,6 +643,7 @@
/* stop lookup and timeout task */
GNUNET_DHT_get_stop (rh->get_handle);
+ rh->get_handle = NULL;
if (rh->dht_heap_node != NULL)
{
@@ -770,7 +783,12 @@
{
rh_heap_root = GNUNET_CONTAINER_heap_remove_root (dht_lookup_heap);
GNUNET_DHT_get_stop(rh_heap_root->get_handle);
+ rh_heap_root->get_handle = NULL;
rh_heap_root->dht_heap_node = NULL;
+
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "GNS_PHASE_REC: Replacing oldest background query for %s\n",
+ rh_heap_root->name);
rh_heap_root->proc(rh_heap_root->proc_cls,
rh_heap_root,
0,
@@ -782,6 +800,8 @@
}
xquery = htonl(rlh->record_type);
+
+ GNUNET_assert(rh->get_handle == NULL);
rh->get_handle = GNUNET_DHT_get_start(dht_handle,
GNUNET_TIME_UNIT_FOREVER_REL,
GNUNET_BLOCK_TYPE_GNS_NAMERECORD,
@@ -957,12 +977,15 @@
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
"GNS_PHASE_DELEGATE: dht lookup for query %s timed out.\n",
- rh->name);
+ rh->authority_name);
rh->status |= TIMED_OUT;
rh->timeout_task = GNUNET_SCHEDULER_NO_TASK;
+ GNUNET_DHT_get_stop (rh->get_handle);
+ rh->get_handle = NULL;
+
if (strcmp(rh->name, "") == 0)
{
/*
@@ -994,8 +1017,6 @@
&background_lookup_result_processor,
NULL);
- GNUNET_DHT_get_stop (rh->get_handle);
-
rh->proc(rh->proc_cls, rh, 0, NULL);
}
@@ -1584,6 +1605,11 @@
rh_heap_root = GNUNET_CONTAINER_heap_remove_root (dht_lookup_heap);
GNUNET_DHT_get_stop(rh_heap_root->get_handle);
rh_heap_root->dht_heap_node = NULL;
+
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "GNS_PHASE_DELEGATE: Replacing oldest background query for %s\n",
+ rh_heap_root->authority_name);
+
rh_heap_root->proc(rh_heap_root->proc_cls,
rh_heap_root,
0,
@@ -1595,7 +1621,8 @@
}
xquery = htonl(GNUNET_GNS_RECORD_PKEY);
-
+
+ GNUNET_assert(rh->get_handle == NULL);
rh->get_handle = GNUNET_DHT_get_start(dht_handle,
GNUNET_TIME_UNIT_FOREVER_REL,
GNUNET_BLOCK_TYPE_GNS_NAMERECORD,
@@ -1903,6 +1930,7 @@
rh->proc_cls = rlh;
rh->priv_key = key;
rh->timeout = timeout;
+ rh->get_handle = NULL;
if (timeout.rel_value != GNUNET_TIME_UNIT_FOREVER_REL.rel_value)
{
/*
Modified: gnunet/src/gns/gnunet-service-gns_resolver.h
===================================================================
--- gnunet/src/gns/gnunet-service-gns_resolver.h 2012-03-23 14:46:36 UTC
(rev 20724)
+++ gnunet/src/gns/gnunet-service-gns_resolver.h 2012-03-23 15:45:03 UTC
(rev 20725)
@@ -35,6 +35,10 @@
/* handle to a resolution process */
struct ResolverHandle;
+/**
+ * continuation called when cleanup of resolver finishes
+ */
+typedef void (*ResolverCleanupContinuation) (void);
/**
* processor for a resultion result
@@ -256,9 +260,11 @@
/**
* Cleanup resolver: Terminate pending lookups
+ *
+ * @param cont continuation to call when finished
*/
void
-gns_resolver_cleanup(void);
+gns_resolver_cleanup(ResolverCleanupContinuation cont);
/**
* Lookup of a record in a specific zone
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20725 - gnunet/src/gns,
gnunet <=