@@ -62,6 +62,8 @@ static void mca_base_var_group_destructor(mca_base_var_group_t *group);
6262OBJ_CLASS_INSTANCE (mca_base_var_group_t , opal_object_t , mca_base_var_group_constructor ,
6363 mca_base_var_group_destructor );
6464
65+ static opal_mutex_t mca_base_var_group_lock = OPAL_MUTEX_STATIC_INIT ;
66+
6567int mca_base_var_group_init (void )
6668{
6769 int ret ;
@@ -82,7 +84,9 @@ int mca_base_var_group_init(void)
8284 }
8385
8486 mca_base_var_group_initialized = true;
87+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
8588 mca_base_var_group_count = 0 ;
89+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
8690 }
8791
8892 return OPAL_SUCCESS ;
@@ -103,7 +107,9 @@ int mca_base_var_group_finalize(void)
103107 }
104108 OBJ_DESTRUCT (& mca_base_var_groups );
105109 OBJ_DESTRUCT (& mca_base_var_group_index_hash );
110+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
106111 mca_base_var_group_count = 0 ;
112+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
107113 mca_base_var_group_initialized = false;
108114 }
109115
@@ -168,6 +174,7 @@ static bool compare_strings(const char *str1, const char *str2)
168174static int group_find_linear (const char * project_name , const char * framework_name ,
169175 const char * component_name , bool invalidok )
170176{
177+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
171178 for (int i = 0 ; i < mca_base_var_group_count ; ++ i ) {
172179 mca_base_var_group_t * group ;
173180
@@ -179,9 +186,11 @@ static int group_find_linear(const char *project_name, const char *framework_nam
179186 if (compare_strings (project_name , group -> group_project )
180187 && compare_strings (framework_name , group -> group_framework )
181188 && compare_strings (component_name , group -> group_component )) {
189+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
182190 return i ;
183191 }
184192 }
193+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
185194
186195 return OPAL_ERR_NOT_FOUND ;
187196}
@@ -241,7 +250,9 @@ static int group_register(const char *project_name, const char *framework_name,
241250 return ret ;
242251 }
243252 group -> group_isvalid = true;
253+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
244254 mca_base_var_groups_timestamp ++ ;
255+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
245256
246257 /* group already exists. return it's index */
247258 return group_id ;
@@ -305,8 +316,10 @@ static int group_register(const char *project_name, const char *framework_name,
305316 opal_hash_table_set_value_ptr (& mca_base_var_group_index_hash , group -> group_full_name ,
306317 strlen (group -> group_full_name ), (void * ) (uintptr_t ) group_id );
307318
319+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
308320 mca_base_var_group_count ++ ;
309321 mca_base_var_groups_timestamp ++ ;
322+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
310323
311324 if (0 <= parent_id ) {
312325 mca_base_var_group_t * parent_group ;
@@ -406,7 +419,9 @@ int mca_base_var_group_deregister(int group_index)
406419 /* ordering of variables and subgroups must be the same if the
407420 * group is re-registered */
408421
422+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
409423 mca_base_var_groups_timestamp ++ ;
424+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
410425
411426 return OPAL_SUCCESS ;
412427}
@@ -445,7 +460,9 @@ int mca_base_var_group_add_var(const int group_index, const int param_index)
445460 return ret ;
446461 }
447462
463+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
448464 mca_base_var_groups_timestamp ++ ;
465+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
449466
450467 /* return the group index */
451468 return (int ) opal_value_array_get_size (& group -> group_vars ) - 1 ;
@@ -474,7 +491,9 @@ int mca_base_var_group_add_pvar(const int group_index, const int param_index)
474491 return ret ;
475492 }
476493
494+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
477495 mca_base_var_groups_timestamp ++ ;
496+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
478497
479498 /* return the group index */
480499 return (int ) opal_value_array_get_size (& group -> group_pvars ) - 1 ;
@@ -531,7 +550,9 @@ int mca_base_var_group_add_event (const int group_index, const int event_index)
531550 return ret ;
532551 }
533552
553+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
534554 mca_base_var_groups_timestamp ++ ;
555+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
535556
536557 /* return the group index */
537558 return (int ) opal_value_array_get_size (& group -> group_events ) - 1 ;
@@ -612,10 +633,20 @@ static void mca_base_var_group_destructor(mca_base_var_group_t *group)
612633
613634int mca_base_var_group_get_count (void )
614635{
615- return mca_base_var_group_count ;
636+ int ret ;
637+
638+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
639+ ret = mca_base_var_group_count ;
640+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
641+ return ret ;
616642}
617643
618644int mca_base_var_group_get_stamp (void )
619645{
620- return mca_base_var_groups_timestamp ;
646+ int ret ;
647+
648+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
649+ ret = mca_base_var_groups_timestamp ;
650+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
651+ return ret ;
621652}
0 commit comments