From: Christian Grothoff Date: Wed, 22 Feb 2017 12:46:57 +0000 (+0100) Subject: fix test_dht_montior abortion, fix crash on NULL HELLO X-Git-Tag: taler-0.2.1~92 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0d2ff615ee0b84852e80d96d5373ebead4c3e423;p=oweals%2Fgnunet.git fix test_dht_montior abortion, fix crash on NULL HELLO --- diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c index 9e1cecfcd..810e6196a 100644 --- a/src/dht/gnunet-service-dht_neighbours.c +++ b/src/dht/gnunet-service-dht_neighbours.c @@ -1915,7 +1915,6 @@ handle_find_peer (const struct GNUNET_PeerIdentity *sender, if (NULL == peer) peer = bucket->head; hello = GDS_HELLO_get (peer->id); - hello_size = GNUNET_HELLO_size (hello); } while ( (NULL == hello) || (GNUNET_BLOCK_EVALUATION_OK_MORE != GNUNET_BLOCK_evaluate (GDS_block_context, @@ -1925,7 +1924,7 @@ handle_find_peer (const struct GNUNET_PeerIdentity *sender, &peer->phash, NULL, 0, hello, - hello_size)) ); + (hello_size = GNUNET_HELLO_size (hello)))) ); GDS_NEIGHBOURS_handle_reply (sender, GNUNET_BLOCK_TYPE_DHT_HELLO, GNUNET_TIME_relative_to_absolute diff --git a/src/dht/test_dht_monitor.c b/src/dht/test_dht_monitor.c index 5e6fc074a..223488b0f 100644 --- a/src/dht/test_dht_monitor.c +++ b/src/dht/test_dht_monitor.c @@ -133,6 +133,26 @@ shutdown_task (void *cls) GNUNET_free (monitors); GNUNET_SCHEDULER_cancel (put_task); GNUNET_DHT_TEST_cleanup (ctx); + if (NULL != timeout_task) + { + GNUNET_SCHEDULER_cancel (timeout_task); + timeout_task = NULL; + } +} + + +/** + * Task run on success or timeout to clean up. + * Terminates active get operations and shuts down + * the testbed. + * + * @param cls the 'struct GNUNET_DHT_TestContext' + */ +static void +timeout_task (void *cls) +{ + timeout_task = NULL; + GNUNET_SCHEDULER_shutdown (); } @@ -157,7 +177,8 @@ dht_get_handler (void *cls, struct GNUNET_TIME_Absolute exp, const struct GNUNET_PeerIdentity *get_path, unsigned int get_path_length, const struct GNUNET_PeerIdentity *put_path, - unsigned int put_path_length, enum GNUNET_BLOCK_Type type, + unsigned int put_path_length, + enum GNUNET_BLOCK_Type type, size_t size, const void *data) { struct GetOperation *get_op = cls; @@ -186,8 +207,7 @@ dht_get_handler (void *cls, struct GNUNET_TIME_Absolute exp, return; /* all DHT GET operations successful; terminate! */ ok = 0; - ctx = GNUNET_SCHEDULER_cancel (timeout_task); - timeout_task = GNUNET_SCHEDULER_add_now (&shutdown_task, ctx); + GNUNET_SCHEDULER_shutdown (); } @@ -202,11 +222,10 @@ do_puts (void *cls) struct GNUNET_DHT_Handle **hs = cls; struct GNUNET_HashCode key; struct GNUNET_HashCode value; - unsigned int i; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Putting values into DHT\n"); - for (i = 0; i < NUM_PEERS; i++) + for (unsigned int i = 0; i < NUM_PEERS; i++) { GNUNET_CRYPTO_hash (&i, sizeof (i), &key); GNUNET_CRYPTO_hash (&key, sizeof (key), &value); @@ -360,7 +379,8 @@ run (void *cls, GNUNET_assert (NUM_PEERS == num_peers); my_peers = peers; - monitors = GNUNET_malloc (num_peers * sizeof (struct GNUNET_DHT_MonitorHandle *)); + monitors = GNUNET_new_array (num_peers, + struct GNUNET_DHT_MonitorHandle *); for (i = 0; i < num_peers; i++) monitors[i] = GNUNET_DHT_monitor_start (dhts[i], GNUNET_BLOCK_TYPE_ANY, @@ -392,7 +412,10 @@ run (void *cls, } } timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, - &shutdown_task, ctx); + &timeout_task, + ctx); + GNUNET_SCHEDULER_add_shutdown (&shutdown_task, + ctx); }