From 55f0dcb81a8c2942b833027b2d71a268986ea40f Mon Sep 17 00:00:00 2001 From: Nathan Hjelm Date: Thu, 15 May 2014 17:36:26 +0000 Subject: [PATCH] Add netpatterns_cleanup_narray_knomial_tree function to cleanup after netpatterns_setup_narray_knomial_tree. Fix a bug in ptpcoll that caused memory allocated by netpatterns_setup_narray_knomial_tree to leak. cmr=v1.8.2:reviewer=manjugv This commit was SVN r31781. --- ompi/mca/bcol/ptpcoll/bcol_ptpcoll_module.c | 4 ++++ ompi/patterns/net/netpatterns.h | 2 ++ ompi/patterns/net/netpatterns_knomial_tree.c | 17 ++++------------- ompi/patterns/net/netpatterns_nary_tree.c | 15 +++++++++++++++ 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/ompi/mca/bcol/ptpcoll/bcol_ptpcoll_module.c b/ompi/mca/bcol/ptpcoll/bcol_ptpcoll_module.c index 8975fceed6..f1d3b8d0c0 100644 --- a/ompi/mca/bcol/ptpcoll/bcol_ptpcoll_module.c +++ b/ompi/mca/bcol/ptpcoll/bcol_ptpcoll_module.c @@ -173,7 +173,11 @@ mca_bcol_ptpcoll_module_destruct(mca_bcol_ptpcoll_module_t *ptpcoll_module) free(ptpcoll_module->narray_knomial_proxy_extra_index); ptpcoll_module->narray_knomial_proxy_extra_index = NULL; } + if (NULL != ptpcoll_module->narray_knomial_node) { + for(i = 0; i < ptpcoll_module->full_narray_tree_size; i++) { + netpatterns_cleanup_narray_knomial_tree (ptpcoll_module->narray_knomial_node + i); + } free(ptpcoll_module->narray_knomial_node); ptpcoll_module->narray_knomial_node = NULL; } diff --git a/ompi/patterns/net/netpatterns.h b/ompi/patterns/net/netpatterns.h index faba8ed832..330d090eda 100644 --- a/ompi/patterns/net/netpatterns.h +++ b/ompi/patterns/net/netpatterns.h @@ -129,6 +129,8 @@ OMPI_DECLSPEC int netpatterns_setup_narray_tree(int tree_order, int my_rank, int /* setup an n-array tree with k-nomial levels */ OMPI_DECLSPEC int netpatterns_setup_narray_knomial_tree( int tree_order, int my_rank, int num_nodes, netpatterns_narray_knomial_tree_node_t *my_node); +/* cleanup an n-array tree setup by the above function */ +OMPI_DECLSPEC void netpatterns_cleanup_narray_knomial_tree (netpatterns_narray_knomial_tree_node_t *my_node); /* setup an multi-nomial tree - for each node in the tree * this returns it's parent, and it's children diff --git a/ompi/patterns/net/netpatterns_knomial_tree.c b/ompi/patterns/net/netpatterns_knomial_tree.c index ec8ed24149..491b5fda0c 100644 --- a/ompi/patterns/net/netpatterns_knomial_tree.c +++ b/ompi/patterns/net/netpatterns_knomial_tree.c @@ -1,8 +1,11 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ /* * Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved. * Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved. * Copyright (c) 2014 Research Organization for Information Science * and Technology (RIST). All rights reserved. + * Copyright (c) 2014 Los Alamos National Security, LLC. All rights + * reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -528,7 +531,6 @@ OMPI_DECLSPEC void netpatterns_cleanup_recursive_knomial_allgather_tree_node( free(exchange_node->payload_info); } - OMPI_DECLSPEC int netpatterns_setup_recursive_knomial_tree_node( int num_nodes, int node_rank, int tree_order, netpatterns_k_exchange_node_t *exchange_node) @@ -667,18 +669,7 @@ OMPI_DECLSPEC int netpatterns_setup_recursive_knomial_tree_node( Error: - if (NULL != exchange_node->rank_extra_sources_array) { - free(exchange_node->rank_extra_sources_array); - } - - if (NULL != exchange_node->rank_exchanges) { - for (i = 0; i < exchange_node->n_exchanges; i++) { - if (NULL != exchange_node->rank_exchanges[i]) { - free(exchange_node->rank_exchanges[i]); - } - } - free(exchange_node->rank_exchanges); - } + netpatterns_cleanup_recursive_knomial_tree_node (exchange_node); /* error return */ return OMPI_ERROR; diff --git a/ompi/patterns/net/netpatterns_nary_tree.c b/ompi/patterns/net/netpatterns_nary_tree.c index 13e907b7b9..d0e0b1a37e 100644 --- a/ompi/patterns/net/netpatterns_nary_tree.c +++ b/ompi/patterns/net/netpatterns_nary_tree.c @@ -1,6 +1,9 @@ +/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ /* * Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved. * Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved. + * Copyright (c) 2014 Los Alamos National Security, LLC. All rights + * reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -156,6 +159,18 @@ Error: return OMPI_ERROR; } +void netpatterns_cleanup_narray_knomial_tree (netpatterns_narray_knomial_tree_node_t *my_node) +{ + if (my_node->children_ranks) { + free (my_node->children_ranks); + my_node->children_ranks = NULL; + } + + if (0 != my_node->my_rank) { + netpatterns_cleanup_recursive_knomial_tree_node (&my_node->k_node); + } +} + int netpatterns_setup_narray_knomial_tree( int tree_order, int my_rank, int num_nodes, netpatterns_narray_knomial_tree_node_t *my_node)