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);
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;
}

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

@ -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

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

@ -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;

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

@ -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)