From 8fcba4447fd83577ec94e5926801c396cf7dbaf8 Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Wed, 25 Jul 2012 09:59:10 +0000 Subject: -fixes mem leaks --- src/testbed/gnunet-service-testbed.c | 12 ++---------- src/testbed/gnunet-testbed-helper.c | 8 +++++++- src/testbed/testbed_api.h | 7 ++++++- src/testbed/testbed_api_hosts.c | 34 +++++++++++++++++++++------------- src/testbed/valgrind-zlib.supp | 5 ++--- 5 files changed, 38 insertions(+), 28 deletions(-) (limited to 'src/testbed') diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c index ac0ca26b0..f2bb16488 100644 --- a/src/testbed/gnunet-service-testbed.c +++ b/src/testbed/gnunet-service-testbed.c @@ -404,15 +404,6 @@ static GNUNET_SCHEDULER_TaskIdentifier lcf_proc_task_id; */ static GNUNET_SCHEDULER_TaskIdentifier shutdown_task_id; -/******************/ -/* Testing System */ -/******************/ - -/** - * Our configuration; we also use this as template for starting other controllers - */ -static struct GNUNET_CONFIGURATION_Handle *config; - /** * Function called to notify a client about the connection begin ready to queue @@ -1543,6 +1534,8 @@ shutdown_task (void *cls, GNUNET_free_non_null (master_context->master_ip); if (NULL != master_context->system) GNUNET_TESTING_system_destroy (master_context->system, GNUNET_YES); + GNUNET_free (master_context); + master_context = NULL; } } @@ -1620,7 +1613,6 @@ testbed_run (void *cls, {NULL} }; - config = GNUNET_CONFIGURATION_dup (cfg); GNUNET_SERVER_add_handlers (server, message_handlers); GNUNET_SERVER_disconnect_notify (server, diff --git a/src/testbed/gnunet-testbed-helper.c b/src/testbed/gnunet-testbed-helper.c index 737d13c6d..36eb3e931 100644 --- a/src/testbed/gnunet-testbed-helper.c +++ b/src/testbed/gnunet-testbed-helper.c @@ -300,6 +300,7 @@ tokenizer_cb (void *cls, void *client, { LOG (GNUNET_ERROR_TYPE_WARNING, "Unable to write config file: %s -- exiting\n", config); + GNUNET_CONFIGURATION_destroy (cfg); GNUNET_free (config); goto error; } @@ -312,13 +313,18 @@ tokenizer_cb (void *cls, void *client, { LOG (GNUNET_ERROR_TYPE_WARNING, "Error staring gnunet-service-testbed -- exiting\n"); + GNUNET_CONFIGURATION_destroy (cfg); goto error; } GNUNET_DISK_pipe_close_end (pipe_out, GNUNET_DISK_PIPE_END_WRITE); GNUNET_DISK_pipe_close_end (pipe_in, GNUNET_DISK_PIPE_END_READ); done_reading = GNUNET_YES; config = GNUNET_CONFIGURATION_serialize (cfg, &config_size); - xconfig_size = GNUNET_TESTBED_compress_config_ (config, config_size, &xconfig); + GNUNET_CONFIGURATION_destroy (cfg); + cfg = NULL; + xconfig_size = GNUNET_TESTBED_compress_config_ (config, config_size, + &xconfig); + GNUNET_free (config); wc = GNUNET_malloc (sizeof (struct WriteContext)); wc->length = xconfig_size + sizeof (struct GNUNET_TESTBED_HelperReply); reply = GNUNET_realloc (xconfig, wc->length); diff --git a/src/testbed/testbed_api.h b/src/testbed/testbed_api.h index 1d984ca93..4a5adfa17 100644 --- a/src/testbed/testbed_api.h +++ b/src/testbed/testbed_api.h @@ -56,7 +56,12 @@ enum OperationType /** * Get peer information operation */ - OP_PEER_INFO + OP_PEER_INFO, + + /** + * Overlay connection operation + */ + OP_OVERLAY_CONNECT, }; diff --git a/src/testbed/testbed_api_hosts.c b/src/testbed/testbed_api_hosts.c index 066f0a254..b4a083366 100644 --- a/src/testbed/testbed_api_hosts.c +++ b/src/testbed/testbed_api_hosts.c @@ -235,6 +235,7 @@ GNUNET_TESTBED_host_create_with_id (uint32_t id, uint16_t port) { struct GNUNET_TESTBED_Host *host; + uint32_t new_size; if ((id < host_list_size) && (NULL != host_list[id])) { @@ -246,13 +247,17 @@ GNUNET_TESTBED_host_create_with_id (uint32_t id, host->username = username; host->id = id; host->port = (0 == port) ? 22 : port; - if (id >= host_list_size) + new_size = host_list_size; + while (id >= new_size) + new_size += HOST_LIST_GROW_STEP; + if (new_size != host_list_size) { - host_list_size += HOST_LIST_GROW_STEP; host_list = GNUNET_realloc (host_list, sizeof (struct GNUNET_TESTBED_Host) - * host_list_size); - (void) memset(&host_list[host_list_size - HOST_LIST_GROW_STEP], - 0, sizeof (struct GNUNET_TESTBED_Host) * host_list_size); + * new_size); + (void) memset(&host_list[host_list_size], 0, + sizeof (struct GNUNET_TESTBED_Host) * + (new_size - host_list_size)); + host_list_size = new_size; } LOG (GNUNET_ERROR_TYPE_DEBUG, "Adding host with id: %u\n", host->id); @@ -322,18 +327,21 @@ GNUNET_TESTBED_host_destroy (struct GNUNET_TESTBED_Host *host) GNUNET_CONTAINER_DLL_remove (host->rc_head, host->rc_tail, rc); GNUNET_free (rc); } - for (id = 0; id < HOST_LIST_GROW_STEP; id++) + GNUNET_free (host); + while (host_list_size >= HOST_LIST_GROW_STEP) { - if (((host->id + id) >= host_list_size) || - (NULL != host_list[host->id + id])) + for (id = host_list_size - 1; + id > host_list_size - HOST_LIST_GROW_STEP; id--) + if (NULL != host_list[id]) + break; + if (id != host_list_size - HOST_LIST_GROW_STEP) + break; + if (NULL != host_list[id]) break; - } - if (HOST_LIST_GROW_STEP == id) - { host_list_size -= HOST_LIST_GROW_STEP; - host_list = GNUNET_realloc (host_list, host_list_size); } - GNUNET_free (host); + host_list = GNUNET_realloc (host_list, sizeof (struct GNUNET_TESTBED_Host) * + host_list_size); } diff --git a/src/testbed/valgrind-zlib.supp b/src/testbed/valgrind-zlib.supp index 683eb377a..ca6ce115f 100644 --- a/src/testbed/valgrind-zlib.supp +++ b/src/testbed/valgrind-zlib.supp @@ -2,6 +2,5 @@ Memcheck:Cond fun:inflateReset2 - obj:* - obj:* -} \ No newline at end of file + ... +} -- cgit v1.2.3