1
1

Merge pull request #520 from hjelmn/valgrind_cleanness

fix memory leaks and valgrind errors
Этот коммит содержится в:
Nathan Hjelm 2015-04-13 10:09:34 -06:00
родитель 49f52a5356 a7b0c00ab6
Коммит 113c890ccf
9 изменённых файлов: 59 добавлений и 16 удалений

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

@ -37,6 +37,15 @@ int MPI_T_finalize (void)
if (0 == --mpit_init_count) { if (0 == --mpit_init_count) {
(void) ompi_info_close_components (); (void) ompi_info_close_components ();
if ((!ompi_mpi_initialized || ompi_mpi_finalized) &&
(NULL != ompi_mpi_main_thread)) {
/* we are not between MPI_Init and MPI_Finalize so we
* have to free the ompi_mpi_main_thread */
OBJ_RELEASE(ompi_mpi_main_thread);
ompi_mpi_main_thread = NULL;
}
(void) opal_finalize_util (); (void) opal_finalize_util ();
} }

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

@ -1,3 +1,4 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/* /*
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
* University Research and Technology * University Research and Technology
@ -10,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California. * Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved. * All rights reserved.
* Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2006-2013 Los Alamos National Security, LLC. All rights * Copyright (c) 2006-2015 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2006-2009 University of Houston. All rights reserved. * Copyright (c) 2006-2009 University of Houston. All rights reserved.
* Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved.
@ -342,7 +343,10 @@ void ompi_mpi_thread_level(int requested, int *provided)
ompi_mpi_thread_provided = *provided = requested; ompi_mpi_thread_provided = *provided = requested;
} }
} }
ompi_mpi_main_thread = opal_thread_get_self();
if (!ompi_mpi_main_thread) {
ompi_mpi_main_thread = opal_thread_get_self();
}
ompi_mpi_thread_multiple = (ompi_mpi_thread_provided == ompi_mpi_thread_multiple = (ompi_mpi_thread_provided ==
MPI_THREAD_MULTIPLE); MPI_THREAD_MULTIPLE);

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

@ -67,7 +67,8 @@ static char *mca_base_var_file_prefix = NULL;
static char *mca_base_envar_file_prefix = NULL; static char *mca_base_envar_file_prefix = NULL;
static char *mca_base_param_file_path = NULL; static char *mca_base_param_file_path = NULL;
static char *mca_base_env_list = NULL; static char *mca_base_env_list = NULL;
static char *mca_base_env_list_sep = ";"; #define MCA_BASE_ENV_LIST_SEP_DEFAULT ";"
static char *mca_base_env_list_sep = MCA_BASE_ENV_LIST_SEP_DEFAULT;
static char *mca_base_env_list_internal = NULL; static char *mca_base_env_list_internal = NULL;
static bool mca_base_var_suppress_override_warning = false; static bool mca_base_var_suppress_override_warning = false;
static opal_list_t mca_base_var_file_values; static opal_list_t mca_base_var_file_values;
@ -273,6 +274,8 @@ int mca_base_var_init(void)
"Set SHELL env variables", "Set SHELL env variables",
MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, OPAL_INFO_LVL_3, MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, &mca_base_env_list); MCA_BASE_VAR_SCOPE_READONLY, &mca_base_env_list);
mca_base_env_list_sep = MCA_BASE_ENV_LIST_SEP_DEFAULT;
(void)mca_base_var_register ("opal", "mca", "base", "env_list_delimiter", (void)mca_base_var_register ("opal", "mca", "base", "env_list_delimiter",
"Set SHELL env variables delimiter. Default: semicolon ';'", "Set SHELL env variables delimiter. Default: semicolon ';'",
MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, OPAL_INFO_LVL_3, MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, OPAL_INFO_LVL_3,
@ -430,6 +433,7 @@ static int mca_base_var_cache_files(bool rel_path_search)
if (OPAL_SUCCESS != ret) { if (OPAL_SUCCESS != ret) {
return ret; return ret;
} }
mca_base_envar_files = strdup(mca_base_var_files); mca_base_envar_files = strdup(mca_base_var_files);
(void) mca_base_var_register_synonym (ret, "opal", "mca", NULL, "param_files", (void) mca_base_var_register_synonym (ret, "opal", "mca", NULL, "param_files",
@ -1131,11 +1135,15 @@ int mca_base_var_finalize(void)
if (NULL != mca_base_var_file_list) { if (NULL != mca_base_var_file_list) {
opal_argv_free(mca_base_var_file_list); opal_argv_free(mca_base_var_file_list);
} }
mca_base_var_file_list = NULL;
(void) mca_base_var_group_finalize (); (void) mca_base_var_group_finalize ();
(void) mca_base_pvar_finalize (); (void) mca_base_pvar_finalize ();
OBJ_DESTRUCT(&mca_base_var_index_hash); OBJ_DESTRUCT(&mca_base_var_index_hash);
free (mca_base_envar_files);
mca_base_envar_files = NULL;
} }
/* All done */ /* All done */
@ -1241,15 +1249,31 @@ static int fixup_files(char **file_list, char * path, bool rel_path_search, char
static int read_files(char *file_list, opal_list_t *file_values, char sep) static int read_files(char *file_list, opal_list_t *file_values, char sep)
{ {
int i, count; char **tmp = opal_argv_split(file_list, sep);
int i, count, ret;
if (!tmp) {
return OPAL_ERR_OUT_OF_RESOURCE;
}
if (mca_base_var_file_list) {
count = opal_argv_count (mca_base_var_file_list);
ret = opal_argv_insert (&mca_base_var_file_list, count, tmp);
if (OPAL_SUCCESS != ret) {
return ret;
}
opal_argv_free (tmp);
} else {
mca_base_var_file_list = tmp;
}
count = opal_argv_count(mca_base_var_file_list);
/* Iterate through all the files passed in -- read them in reverse /* Iterate through all the files passed in -- read them in reverse
order so that we preserve unix/shell path-like semantics (i.e., order so that we preserve unix/shell path-like semantics (i.e.,
the entries farthest to the left get precedence) */ the entries farthest to the left get precedence) */
mca_base_var_file_list = opal_argv_split(file_list, sep);
count = opal_argv_count(mca_base_var_file_list);
for (i = count - 1; i >= 0; --i) { for (i = count - 1; i >= 0; --i) {
mca_base_parse_paramfile(mca_base_var_file_list[i], file_values); mca_base_parse_paramfile(mca_base_var_file_list[i], file_values);
} }

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

@ -209,6 +209,7 @@ static int mca_btl_vader_component_register (void)
"single_copy_mechanism", "Single copy mechanism to use (defaults to best available)", "single_copy_mechanism", "Single copy mechanism to use (defaults to best available)",
MCA_BASE_VAR_TYPE_INT, new_enum, 0, MCA_BASE_VAR_FLAG_SETTABLE, MCA_BASE_VAR_TYPE_INT, new_enum, 0, MCA_BASE_VAR_FLAG_SETTABLE,
OPAL_INFO_LVL_3, MCA_BASE_VAR_SCOPE_GROUP, &mca_btl_vader_component.single_copy_mechanism); OPAL_INFO_LVL_3, MCA_BASE_VAR_SCOPE_GROUP, &mca_btl_vader_component.single_copy_mechanism);
OBJ_RELEASE(new_enum);
#if OPAL_BTL_VADER_HAVE_KNEM #if OPAL_BTL_VADER_HAVE_KNEM
/* Currently disabling DMA mode by default; it's not clear that this is useful in all applications and architectures. */ /* Currently disabling DMA mode by default; it's not clear that this is useful in all applications and architectures. */

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

@ -164,6 +164,7 @@ opal_installdirs_base_close(void)
free(opal_install_dirs.opaldatadir); free(opal_install_dirs.opaldatadir);
free(opal_install_dirs.opallibdir); free(opal_install_dirs.opallibdir);
free(opal_install_dirs.opalincludedir); free(opal_install_dirs.opalincludedir);
memset (&opal_install_dirs, 0, sizeof (opal_install_dirs));
return mca_base_framework_components_close (&opal_installdirs_base_framework, NULL); return mca_base_framework_components_close (&opal_installdirs_base_framework, NULL);
} }

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

@ -104,6 +104,9 @@ opal_finalize_util(void)
/* finalize the class/object system */ /* finalize the class/object system */
opal_class_finalize(); opal_class_finalize();
free (opal_process_info.nodename);
opal_process_info.nodename = NULL;
return OPAL_SUCCESS; return OPAL_SUCCESS;
} }

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

@ -303,11 +303,6 @@ opal_init_util(int* pargc, char*** pargv)
goto return_error; goto return_error;
} }
if (OPAL_SUCCESS != (ret = opal_net_init())) {
error = "opal_net_init";
goto return_error;
}
/* Setup the parameter system */ /* Setup the parameter system */
if (OPAL_SUCCESS != (ret = mca_base_var_init())) { if (OPAL_SUCCESS != (ret = mca_base_var_init())) {
error = "mca_base_var_init"; error = "mca_base_var_init";
@ -320,6 +315,11 @@ opal_init_util(int* pargc, char*** pargv)
goto return_error; goto return_error;
} }
if (OPAL_SUCCESS != (ret = opal_net_init())) {
error = "opal_net_init";
goto return_error;
}
/* pretty-print stack handlers */ /* pretty-print stack handlers */
if (OPAL_SUCCESS != (ret = opal_util_register_stackhandlers())) { if (OPAL_SUCCESS != (ret = opal_util_register_stackhandlers())) {
error = "opal_util_register_stackhandlers"; error = "opal_util_register_stackhandlers";

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

@ -231,6 +231,7 @@ int opal_register_params(void)
} }
#if OPAL_ENABLE_TIMING #if OPAL_ENABLE_TIMING
opal_timing_sync_file = NULL;
(void) mca_base_var_register ("opal", "opal", NULL, "timing_sync_file", (void) mca_base_var_register ("opal", "opal", NULL, "timing_sync_file",
"Clock synchronisation information generated by mpisync tool. You don't need to touch this if you use mpirun_prof tool.", "Clock synchronisation information generated by mpisync tool. You don't need to touch this if you use mpirun_prof tool.",
MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0,
@ -240,12 +241,14 @@ int opal_register_params(void)
opal_output(0, "Cannot read file %s containing clock synchronisation information\n", opal_timing_sync_file); opal_output(0, "Cannot read file %s containing clock synchronisation information\n", opal_timing_sync_file);
} }
opal_timing_output = NULL;
(void) mca_base_var_register ("opal", "opal", NULL, "timing_output", (void) mca_base_var_register ("opal", "opal", NULL, "timing_output",
"The name of output file for timing information. If this parameter is not set then output will be directed into OPAL debug channel.", "The name of output file for timing information. If this parameter is not set then output will be directed into OPAL debug channel.",
MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0,
OPAL_INFO_LVL_9, MCA_BASE_VAR_SCOPE_ALL, OPAL_INFO_LVL_9, MCA_BASE_VAR_SCOPE_ALL,
&opal_timing_output); &opal_timing_output);
opal_timing_overhead = true;
(void) mca_base_var_register ("opal", "opal", NULL, "timing_overhead", (void) mca_base_var_register ("opal", "opal", NULL, "timing_overhead",
"Timing framework introduce additional overhead (malloc's mostly)." "Timing framework introduce additional overhead (malloc's mostly)."
" The time spend in such costly routines is measured and may be accounted" " The time spend in such costly routines is measured and may be accounted"
@ -280,9 +283,6 @@ int opal_register_params(void)
int opal_deregister_params(void) int opal_deregister_params(void)
{ {
opal_signal_string = NULL;
opal_net_private_ipv4 = NULL;
opal_set_max_sys_limits = NULL;
opal_register_done = false; opal_register_done = false;
return OPAL_SUCCESS; return OPAL_SUCCESS;

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

@ -182,7 +182,8 @@ int orte_init(int* pargc, char*** pargv, orte_proc_type_t flags)
if (NULL != opal_process_info.nodename) { if (NULL != opal_process_info.nodename) {
free(opal_process_info.nodename); free(opal_process_info.nodename);
} }
opal_process_info.nodename = orte_process_info.nodename; /* opal_finalize_util will call free on this pointer so set from strdup */
opal_process_info.nodename = strdup (orte_process_info.nodename);
/* setup the dstore framework */ /* setup the dstore framework */
if (ORTE_SUCCESS != (ret = mca_base_framework_open(&opal_dstore_base_framework, 0))) { if (ORTE_SUCCESS != (ret = mca_base_framework_open(&opal_dstore_base_framework, 0))) {