aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/gnunet-service-testbed_barriers.c
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2013-09-30 12:55:03 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2013-09-30 12:55:03 +0000
commit87ed5554b390cbf16a9bd15c4aec13ab34d7f080 (patch)
tree57716c8c85d0d8f8e3463f5a1b766f51b4f22405 /src/testbed/gnunet-service-testbed_barriers.c
parentec7d72a656a180ecdd25507439add2656d5bcbae (diff)
downloadgnunet-87ed5554b390cbf16a9bd15c4aec13ab34d7f080.tar.gz
gnunet-87ed5554b390cbf16a9bd15c4aec13ab34d7f080.zip
- fix misc. memleaks
Diffstat (limited to 'src/testbed/gnunet-service-testbed_barriers.c')
-rw-r--r--src/testbed/gnunet-service-testbed_barriers.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/testbed/gnunet-service-testbed_barriers.c b/src/testbed/gnunet-service-testbed_barriers.c
index c1d5036eb..bffafd7ae 100644
--- a/src/testbed/gnunet-service-testbed_barriers.c
+++ b/src/testbed/gnunet-service-testbed_barriers.c
@@ -330,7 +330,10 @@ cleanup_clientctx (struct ClientCtx *ctx)
330 struct MessageQueue *mq; 330 struct MessageQueue *mq;
331 331
332 if (NULL != ctx->client) 332 if (NULL != ctx->client)
333 {
334 GNUNET_SERVER_client_set_user_context_ (ctx->client, NULL, 0);
333 GNUNET_SERVER_client_drop (ctx->client); 335 GNUNET_SERVER_client_drop (ctx->client);
336 }
334 if (NULL != ctx->tx) 337 if (NULL != ctx->tx)
335 GNUNET_SERVER_notify_transmit_ready_cancel (ctx->tx); 338 GNUNET_SERVER_notify_transmit_ready_cancel (ctx->tx);
336 if (NULL != (mq = ctx->mq_head)) 339 if (NULL != (mq = ctx->mq_head))
@@ -482,11 +485,11 @@ handle_barrier_wait (void *cls, struct GNUNET_SERVER_Client *client,
482 (void) memcpy (name, msg->name, name_len); 485 (void) memcpy (name, msg->name, name_len);
483 LOG_DEBUG ("Received BARRIER_WAIT for barrier `%s'\n", name); 486 LOG_DEBUG ("Received BARRIER_WAIT for barrier `%s'\n", name);
484 GNUNET_CRYPTO_hash (name, name_len, &key); 487 GNUNET_CRYPTO_hash (name, name_len, &key);
488 GNUNET_free (name);
485 if (NULL == (barrier = GNUNET_CONTAINER_multihashmap_get (barrier_map, &key))) 489 if (NULL == (barrier = GNUNET_CONTAINER_multihashmap_get (barrier_map, &key)))
486 { 490 {
487 GNUNET_break (0); 491 GNUNET_break (0);
488 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); 492 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
489 GNUNET_free (name);
490 return; 493 return;
491 } 494 }
492 client_ctx = GNUNET_SERVER_client_get_user_context (client, struct ClientCtx); 495 client_ctx = GNUNET_SERVER_client_get_user_context (client, struct ClientCtx);
@@ -556,12 +559,40 @@ GST_barriers_init (struct GNUNET_CONFIGURATION_Handle *cfg)
556 559
557 560
558/** 561/**
562 * Iterator over hash map entries.
563 *
564 * @param cls closure
565 * @param key current key code
566 * @param value value in the hash map
567 * @return #GNUNET_YES if we should continue to
568 * iterate,
569 * #GNUNET_NO if not.
570 */
571static int
572barrier_destroy_iterator (void *cls,
573 const struct GNUNET_HashCode *key,
574 void *value)
575{
576 struct Barrier *barrier = value;
577
578 GNUNET_assert (NULL != barrier);
579 cancel_wrappers (barrier);
580 remove_barrier (barrier);
581 return GNUNET_YES;
582}
583
584
585/**
559 * Function to stop the barrier service 586 * Function to stop the barrier service
560 */ 587 */
561void 588void
562GST_barriers_destroy () 589GST_barriers_destroy ()
563{ 590{
564 GNUNET_assert (NULL != barrier_map); 591 GNUNET_assert (NULL != barrier_map);
592 GNUNET_assert (GNUNET_SYSERR !=
593 GNUNET_CONTAINER_multihashmap_iterate (barrier_map,
594 &barrier_destroy_iterator,
595 NULL));
565 GNUNET_CONTAINER_multihashmap_destroy (barrier_map); 596 GNUNET_CONTAINER_multihashmap_destroy (barrier_map);
566 GNUNET_assert (NULL != ctx); 597 GNUNET_assert (NULL != ctx);
567 GNUNET_SERVICE_stop (ctx); 598 GNUNET_SERVICE_stop (ctx);