Skip to content

Commit 8e01095

Browse files
authored
Merge pull request #8483 from awlauria/protect_mbv_enum
Fix case where var->mbv_enumerator can be released when static.
2 parents a7a0131 + 23f2784 commit 8e01095

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

opal/mca/base/mca_base_var.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ static int mca_base_var_count = 0;
8585

8686
static opal_hash_table_t mca_base_var_index_hash;
8787

88+
#define OPAL_MCA_VAR_MBV_ENUMERATOR_FREE(mbv_enumerator) { \
89+
if(mbv_enumerator && !mbv_enumerator->enum_is_static) { \
90+
OBJ_RELEASE(mbv_enumerator); \
91+
} \
92+
}
93+
8894
const char *ompi_var_type_names[] = {
8995
"int",
9096
"unsigned_int",
@@ -872,8 +878,8 @@ int mca_base_var_deregister(int vari)
872878
var->mbv_storage->stringval) {
873879
free (var->mbv_storage->stringval);
874880
var->mbv_storage->stringval = NULL;
875-
} else if (var->mbv_enumerator && !var->mbv_enumerator->enum_is_static) {
876-
OBJ_RELEASE(var->mbv_enumerator);
881+
} else {
882+
OPAL_MCA_VAR_MBV_ENUMERATOR_FREE(var -> mbv_enumerator);
877883
}
878884

879885
var->mbv_enumerator = NULL;
@@ -1519,10 +1525,7 @@ static int register_variable (const char *project_name, const char *framework_na
15191525
if (MCA_BASE_VAR_TYPE_BOOL == var->mbv_type) {
15201526
enumerator = &mca_base_var_enum_bool;
15211527
} else if (NULL != enumerator) {
1522-
if (var->mbv_enumerator) {
1523-
OBJ_RELEASE (var->mbv_enumerator);
1524-
}
1525-
1528+
OPAL_MCA_VAR_MBV_ENUMERATOR_FREE(var->mbv_enumerator);
15261529
if (!enumerator->enum_is_static) {
15271530
OBJ_RETAIN(enumerator);
15281531
}
@@ -1908,9 +1911,7 @@ static void var_destructor(mca_base_var_t *var)
19081911
}
19091912

19101913
/* don't release the boolean enumerator */
1911-
if (var->mbv_enumerator && !var->mbv_enumerator->enum_is_static) {
1912-
OBJ_RELEASE(var->mbv_enumerator);
1913-
}
1914+
OPAL_MCA_VAR_MBV_ENUMERATOR_FREE(var->mbv_enumerator);
19141915

19151916
if (NULL != var->mbv_long_name) {
19161917
free(var->mbv_long_name);

0 commit comments

Comments
 (0)