From ba188e0085612a599d67de0151aa514373dbbede Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 30 Sep 2013 10:45:05 +0000 Subject: -fixing namestore to not disconnect on empty iteration result --- and namestore API to better survive disconnect --- src/namestore/gnunet-service-namestore.c | 4 ++-- src/namestore/namestore_api.c | 35 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index ea5ad6cd0..1a675cb1f 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c @@ -844,7 +844,7 @@ handle_zone_to_name (void *cls, &ztnr_msg.gns_header.header, GNUNET_NO); } - GNUNET_SERVER_receive_done (client, ztn_ctx.success); + GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -1176,7 +1176,7 @@ monitor_iterate_cb (void *cls, /** - * Handles a 'GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START' message + * Handles a #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START message * * @param cls unused * @param client GNUNET_SERVER_Client sending the message diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c index 3875e3cbf..1832d83f7 100644 --- a/src/namestore/namestore_api.c +++ b/src/namestore/namestore_api.c @@ -225,6 +225,11 @@ struct GNUNET_NAMESTORE_Handle */ GNUNET_SCHEDULER_TaskIdentifier reconnect_task; + /** + * Delay introduced before we reconnect. + */ + struct GNUNET_TIME_Relative reconnect_delay; + /** * Should we reconnect to service due to some serious error? */ @@ -858,6 +863,7 @@ do_transmit (struct GNUNET_NAMESTORE_Handle *h) GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_NO, &transmit_message_to_namestore, h); + GNUNET_break (NULL != h->th); } @@ -901,11 +907,19 @@ reconnect_task (void *cls, static void force_reconnect (struct GNUNET_NAMESTORE_Handle *h) { + if (NULL != h->th) + { + GNUNET_CLIENT_notify_transmit_ready_cancel (h->th); + h->th = NULL; + } h->reconnect = GNUNET_NO; GNUNET_CLIENT_disconnect (h->client); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Reconnecting to namestore\n"); h->is_receiving = GNUNET_NO; h->client = NULL; - h->reconnect_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, + h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay); + h->reconnect_task = GNUNET_SCHEDULER_add_delayed (h->reconnect_delay, &reconnect_task, h); } @@ -958,6 +972,11 @@ GNUNET_NAMESTORE_disconnect (struct GNUNET_NAMESTORE_Handle *h) LOG (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n"); GNUNET_assert (NULL != h); + if (NULL != h->th) + { + GNUNET_CLIENT_notify_transmit_ready_cancel (h->th); + h->th = NULL; + } while (NULL != (p = h->pending_head)) { GNUNET_CONTAINER_DLL_remove (h->pending_head, h->pending_tail, p); @@ -1041,7 +1060,7 @@ GNUNET_NAMESTORE_block_cache (struct GNUNET_NAMESTORE_Handle *h, "NAMESTORE_BLOCK_CACHE", (unsigned int) msg_size); GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); return qe; } @@ -1123,7 +1142,7 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h, "NAMESTORE_RECORD_STORE", label, msg_size, rd_count); GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); return qe; } @@ -1172,7 +1191,7 @@ GNUNET_NAMESTORE_lookup_block (struct GNUNET_NAMESTORE_Handle *h, msg->gns_header.r_id = htonl (rid); msg->query = *derived_hash; GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); return qe; } @@ -1225,7 +1244,7 @@ GNUNET_NAMESTORE_zone_to_name (struct GNUNET_NAMESTORE_Handle *h, /* transmit message */ GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); return qe; } @@ -1279,7 +1298,7 @@ GNUNET_NAMESTORE_zone_iteration_start (struct GNUNET_NAMESTORE_Handle *h, if (NULL != zone) msg->zone = *zone; GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); return it; } @@ -1311,7 +1330,7 @@ GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *it) "Sending `%s' message\n", "ZONE_ITERATION_NEXT"); GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); } @@ -1344,7 +1363,7 @@ GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator *it) "Sending `%s' message\n", "ZONE_ITERATION_STOP"); GNUNET_CONTAINER_DLL_insert_tail (h->pending_head, h->pending_tail, pe); - do_transmit(h); + do_transmit (h); GNUNET_free (it); } -- cgit v1.2.3