1
1

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.
Этот коммит содержится в:
Nathan Hjelm 2014-05-15 17:36:26 +00:00
родитель d3dc2c9b0b
Коммит 55f0dcb81a
4 изменённых файлов: 25 добавлений и 13 удалений

Просмотреть файл

@ -173,7 +173,11 @@ mca_bcol_ptpcoll_module_destruct(mca_bcol_ptpcoll_module_t *ptpcoll_module)
free(ptpcoll_module->narray_knomial_proxy_extra_index); free(ptpcoll_module->narray_knomial_proxy_extra_index);
ptpcoll_module->narray_knomial_proxy_extra_index = NULL; ptpcoll_module->narray_knomial_proxy_extra_index = NULL;
} }
if (NULL != ptpcoll_module->narray_knomial_node) { 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); free(ptpcoll_module->narray_knomial_node);
ptpcoll_module->narray_knomial_node = NULL; ptpcoll_module->narray_knomial_node = NULL;
} }

Просмотреть файл

@ -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 */ /* 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, 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); 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 /* setup an multi-nomial tree - for each node in the tree
* this returns it's parent, and it's children * this returns it's parent, and it's children

Просмотреть файл

@ -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 Mellanox Technologies. All rights reserved.
* Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved. * Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
* Copyright (c) 2014 Research Organization for Information Science * Copyright (c) 2014 Research Organization for Information Science
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* Copyright (c) 2014 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -528,7 +531,6 @@ OMPI_DECLSPEC void netpatterns_cleanup_recursive_knomial_allgather_tree_node(
free(exchange_node->payload_info); free(exchange_node->payload_info);
} }
OMPI_DECLSPEC int netpatterns_setup_recursive_knomial_tree_node( OMPI_DECLSPEC int netpatterns_setup_recursive_knomial_tree_node(
int num_nodes, int node_rank, int tree_order, int num_nodes, int node_rank, int tree_order,
netpatterns_k_exchange_node_t *exchange_node) netpatterns_k_exchange_node_t *exchange_node)
@ -667,18 +669,7 @@ OMPI_DECLSPEC int netpatterns_setup_recursive_knomial_tree_node(
Error: Error:
if (NULL != exchange_node->rank_extra_sources_array) { netpatterns_cleanup_recursive_knomial_tree_node (exchange_node);
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);
}
/* error return */ /* error return */
return OMPI_ERROR; return OMPI_ERROR;

Просмотреть файл

@ -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 Mellanox Technologies. All rights reserved.
* Copyright (c) 2009-2012 Oak Ridge National Laboratory. 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$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -156,6 +159,18 @@ Error:
return OMPI_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 netpatterns_setup_narray_knomial_tree(
int tree_order, int my_rank, int num_nodes, int tree_order, int my_rank, int num_nodes,
netpatterns_narray_knomial_tree_node_t *my_node) netpatterns_narray_knomial_tree_node_t *my_node)