diff --git a/opal/runtime/opal_finalize.c b/opal/runtime/opal_finalize.c index eae6056026..37720d4902 100644 --- a/opal/runtime/opal_finalize.c +++ b/opal/runtime/opal_finalize.c @@ -66,11 +66,17 @@ opal_finalize_util(void) return OPAL_SUCCESS; } +extern int opal_initialized; int opal_finalize(void) { - + if( --opal_initialized != 0 ) { + if( opal_initialized < 0 ) { + return OPAL_ERROR; + } + return OPAL_SUCCESS; + } /* close high resolution timers */ opal_timer_base_close(); diff --git a/opal/runtime/opal_init.c b/opal/runtime/opal_init.c index afa4d84cb8..96984007fa 100644 --- a/opal/runtime/opal_init.c +++ b/opal/runtime/opal_init.c @@ -36,6 +36,8 @@ #include "opal/util/stacktrace.h" #include "opal/util/keyval_parse.h" +int opal_initialized = 0; + static const char * opal_err2str(int errnum) { @@ -122,6 +124,12 @@ opal_init_util(void) int ret; char *error = NULL; + if( ++opal_initialized != 1 ) { + if( opal_initialized < 1 ) { + return OPAL_ERROR; + } + return OPAL_SUCCESS; + } /* initialize the memory allocator */ opal_malloc_init();