Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion ompi/mpi/tool/finalize.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2014 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
Expand All @@ -13,6 +13,7 @@

#include "ompi/mpi/tool/mpit-internal.h"

#include "ompi/runtime/ompi_info_support.h"
#include "opal/include/opal/sys/atomic.h"
#include "opal/runtime/opal.h"

Expand All @@ -35,6 +36,7 @@ int MPI_T_finalize (void)
}

if (0 == --mpit_init_count) {
(void) ompi_info_close_components ();
(void) opal_finalize_util ();
}

Expand Down
32 changes: 21 additions & 11 deletions opal/mca/base/mca_base_framework.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ static bool framework_is_registered (struct mca_base_framework_t *framework)
return !!(framework->framework_flags & MCA_BASE_FRAMEWORK_FLAG_REGISTERED);
}

static bool framework_is_open (struct mca_base_framework_t *framework)
{
return !!(framework->framework_flags & MCA_BASE_FRAMEWORK_FLAG_OPEN);
}

static void framework_open_output (struct mca_base_framework_t *framework)
{
if (0 < framework->framework_verbose) {
Expand Down Expand Up @@ -54,6 +59,8 @@ int mca_base_framework_register (struct mca_base_framework_t *framework,

assert (NULL != framework);

framework->framework_refcnt++;

if (framework_is_registered (framework)) {
return OPAL_SUCCESS;
}
Expand Down Expand Up @@ -127,17 +134,17 @@ int mca_base_framework_open (struct mca_base_framework_t *framework,

assert (NULL != framework);

/* check if this framework is already open */
if (framework->framework_refcnt++) {
return OPAL_SUCCESS;
}

/* register this framework before opening it */
ret = mca_base_framework_register (framework, MCA_BASE_REGISTER_DEFAULT);
if (OPAL_SUCCESS != ret) {
return ret;
}

/* check if this framework is already open */
if (framework_is_open (framework)) {
return OPAL_SUCCESS;
}

if (MCA_BASE_FRAMEWORK_FLAG_NOREGISTER & framework->framework_flags) {
flags |= MCA_BASE_OPEN_FIND_COMPONENTS;
}
Expand All @@ -158,23 +165,27 @@ int mca_base_framework_open (struct mca_base_framework_t *framework,
}

if (OPAL_SUCCESS != ret) {
framework->framework_refcnt = 0;
framework->framework_refcnt--;
} else {
framework->framework_flags |= MCA_BASE_FRAMEWORK_FLAG_OPEN;
}

return ret;
}

int mca_base_framework_close (struct mca_base_framework_t *framework) {
bool is_open = !!framework->framework_refcnt;
bool is_open = framework_is_open (framework);
bool is_registered = framework_is_registered (framework);
int ret, group_id;

assert (NULL != framework);

if (!framework_is_registered (framework) && 0 == framework->framework_refcnt) {
if (!(is_open || is_registered)) {
return OPAL_SUCCESS;
}

if (framework->framework_refcnt && --framework->framework_refcnt) {
assert (framework->framework_refcnt);
if (--framework->framework_refcnt) {
return OPAL_SUCCESS;
}

Expand All @@ -183,7 +194,6 @@ int mca_base_framework_close (struct mca_base_framework_t *framework) {
framework->framework_name, NULL);
if (0 <= group_id) {
(void) mca_base_var_group_deregister (group_id);
framework->framework_flags &= ~MCA_BASE_FRAMEWORK_FLAG_REGISTERED;
}

/* close the framework and all of its components */
Expand All @@ -209,7 +219,7 @@ int mca_base_framework_close (struct mca_base_framework_t *framework) {
ret = OPAL_SUCCESS;
}

framework->framework_flags &= ~MCA_BASE_FRAMEWORK_FLAG_REGISTERED;
framework->framework_flags &= ~(MCA_BASE_FRAMEWORK_FLAG_REGISTERED | MCA_BASE_FRAMEWORK_FLAG_OPEN);

framework_close_output (framework);

Expand Down
3 changes: 2 additions & 1 deletion opal/mca/base/mca_base_framework.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ typedef enum {
MCA_BASE_FRAMEWORK_FLAG_REGISTERED = 2,
/** Framework does not have any DSO components */
MCA_BASE_FRAMEWORK_FLAG_NO_DSO = 4,

/** Internal. Don't set outside mca_base_framework.h */
MCA_BASE_FRAMEWORK_FLAG_OPEN = 8,
/**
* The upper 16 bits are reserved for project specific flags.
*/
Expand Down
6 changes: 5 additions & 1 deletion opal/mca/base/mca_base_var.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012-2014 Los Alamos National Security, LLC. All rights
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* Copyright (c) 2014 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
Expand Down Expand Up @@ -1355,6 +1355,10 @@ static int register_variable (const char *project_name, const char *framework_na
return OPAL_ERROR;
}

if (!group->group_isvalid) {
group->group_isvalid = true;
}

/* Verify the name components match */
if (0 != compare_strings(framework_name, group->group_framework) ||
0 != compare_strings(component_name, group->group_component) ||
Expand Down
20 changes: 8 additions & 12 deletions opal/mca/base/mca_base_var_group.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2008-2013 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
* Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$
*
Expand Down Expand Up @@ -131,7 +131,7 @@ static int group_find_by_name (const char *full_name, int *index, bool invalidok
return rc;
}

rc = mca_base_var_group_get_internal ((int)(uintptr_t) tmp, &group, false);
rc = mca_base_var_group_get_internal ((int)(uintptr_t) tmp, &group, invalidok);
if (OPAL_SUCCESS != rc) {
return rc;
}
Expand Down Expand Up @@ -291,7 +291,7 @@ int mca_base_var_group_component_register (const mca_base_component_t *component
int mca_base_var_group_deregister (int group_index)
{
mca_base_var_group_t *group;
int size, i, ret;
int size, ret;
int *params, *subgroups;

ret = mca_base_var_group_get_internal (group_index, &group, false);
Expand All @@ -305,7 +305,7 @@ int mca_base_var_group_deregister (int group_index)
size = opal_value_array_get_size(&group->group_vars);
params = OPAL_VALUE_ARRAY_GET_BASE(&group->group_vars, int);

for (i = 0 ; i < size ; ++i) {
for (int i = 0 ; i < size ; ++i) {
const mca_base_var_t *var;

ret = mca_base_var_get (params[i], &var);
Expand All @@ -315,14 +315,12 @@ int mca_base_var_group_deregister (int group_index)

(void) mca_base_var_deregister (params[i]);
}
OBJ_DESTRUCT(&group->group_vars);
OBJ_CONSTRUCT(&group->group_vars, opal_value_array_t);

/* invalidate all associated mca performance variables */
size = opal_value_array_get_size(&group->group_pvars);
params = OPAL_VALUE_ARRAY_GET_BASE(&group->group_pvars, int);

for (i = 0 ; i < size ; ++i) {
for (int i = 0 ; i < size ; ++i) {
const mca_base_pvar_t *var;

ret = mca_base_pvar_get (params[i], &var);
Expand All @@ -332,16 +330,14 @@ int mca_base_var_group_deregister (int group_index)

(void) mca_base_pvar_mark_invalid (params[i]);
}
OBJ_DESTRUCT(&group->group_pvars);
OBJ_CONSTRUCT(&group->group_pvars, opal_value_array_t);

size = opal_value_array_get_size(&group->group_subgroups);
subgroups = OPAL_VALUE_ARRAY_GET_BASE(&group->group_subgroups, int);
for (i = 0 ; i < size ; ++i) {
for (int i = 0 ; i < size ; ++i) {
(void) mca_base_var_group_deregister (subgroups[i]);
}
OBJ_DESTRUCT(&group->group_subgroups);
OBJ_CONSTRUCT(&group->group_subgroups, opal_value_array_t);
/* ordering of variables and subgroups must be the same if the
* group is re-registered */

mca_base_var_groups_timestamp++;

Expand Down