@@ -62,6 +62,8 @@ static void mca_base_var_group_destructor(mca_base_var_group_t *group);
62
62
OBJ_CLASS_INSTANCE (mca_base_var_group_t , opal_object_t , mca_base_var_group_constructor ,
63
63
mca_base_var_group_destructor );
64
64
65
+ static opal_mutex_t mca_base_var_group_lock = OPAL_MUTEX_STATIC_INIT ;
66
+
65
67
int mca_base_var_group_init (void )
66
68
{
67
69
int ret ;
@@ -82,7 +84,9 @@ int mca_base_var_group_init(void)
82
84
}
83
85
84
86
mca_base_var_group_initialized = true;
87
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
85
88
mca_base_var_group_count = 0 ;
89
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
86
90
}
87
91
88
92
return OPAL_SUCCESS ;
@@ -103,7 +107,9 @@ int mca_base_var_group_finalize(void)
103
107
}
104
108
OBJ_DESTRUCT (& mca_base_var_groups );
105
109
OBJ_DESTRUCT (& mca_base_var_group_index_hash );
110
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
106
111
mca_base_var_group_count = 0 ;
112
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
107
113
mca_base_var_group_initialized = false;
108
114
}
109
115
@@ -168,6 +174,7 @@ static bool compare_strings(const char *str1, const char *str2)
168
174
static int group_find_linear (const char * project_name , const char * framework_name ,
169
175
const char * component_name , bool invalidok )
170
176
{
177
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
171
178
for (int i = 0 ; i < mca_base_var_group_count ; ++ i ) {
172
179
mca_base_var_group_t * group ;
173
180
@@ -179,9 +186,11 @@ static int group_find_linear(const char *project_name, const char *framework_nam
179
186
if (compare_strings (project_name , group -> group_project )
180
187
&& compare_strings (framework_name , group -> group_framework )
181
188
&& compare_strings (component_name , group -> group_component )) {
189
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
182
190
return i ;
183
191
}
184
192
}
193
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
185
194
186
195
return OPAL_ERR_NOT_FOUND ;
187
196
}
@@ -241,7 +250,9 @@ static int group_register(const char *project_name, const char *framework_name,
241
250
return ret ;
242
251
}
243
252
group -> group_isvalid = true;
253
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
244
254
mca_base_var_groups_timestamp ++ ;
255
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
245
256
246
257
/* group already exists. return it's index */
247
258
return group_id ;
@@ -305,8 +316,10 @@ static int group_register(const char *project_name, const char *framework_name,
305
316
opal_hash_table_set_value_ptr (& mca_base_var_group_index_hash , group -> group_full_name ,
306
317
strlen (group -> group_full_name ), (void * ) (uintptr_t ) group_id );
307
318
319
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
308
320
mca_base_var_group_count ++ ;
309
321
mca_base_var_groups_timestamp ++ ;
322
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
310
323
311
324
if (0 <= parent_id ) {
312
325
mca_base_var_group_t * parent_group ;
@@ -406,7 +419,9 @@ int mca_base_var_group_deregister(int group_index)
406
419
/* ordering of variables and subgroups must be the same if the
407
420
* group is re-registered */
408
421
422
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
409
423
mca_base_var_groups_timestamp ++ ;
424
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
410
425
411
426
return OPAL_SUCCESS ;
412
427
}
@@ -445,7 +460,9 @@ int mca_base_var_group_add_var(const int group_index, const int param_index)
445
460
return ret ;
446
461
}
447
462
463
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
448
464
mca_base_var_groups_timestamp ++ ;
465
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
449
466
450
467
/* return the group index */
451
468
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)
474
491
return ret ;
475
492
}
476
493
494
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
477
495
mca_base_var_groups_timestamp ++ ;
496
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
478
497
479
498
/* return the group index */
480
499
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)
531
550
return ret ;
532
551
}
533
552
553
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
534
554
mca_base_var_groups_timestamp ++ ;
555
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
535
556
536
557
/* return the group index */
537
558
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)
612
633
613
634
int mca_base_var_group_get_count (void )
614
635
{
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 ;
616
642
}
617
643
618
644
int mca_base_var_group_get_stamp (void )
619
645
{
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 ;
621
652
}
0 commit comments