@@ -60,6 +60,8 @@ static void mca_base_var_group_destructor(mca_base_var_group_t *group);
60
60
OBJ_CLASS_INSTANCE (mca_base_var_group_t , opal_object_t , mca_base_var_group_constructor ,
61
61
mca_base_var_group_destructor );
62
62
63
+ static opal_mutex_t mca_base_var_group_lock = OPAL_MUTEX_STATIC_INIT ;
64
+
63
65
int mca_base_var_group_init (void )
64
66
{
65
67
int ret ;
@@ -80,7 +82,9 @@ int mca_base_var_group_init(void)
80
82
}
81
83
82
84
mca_base_var_group_initialized = true;
85
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
83
86
mca_base_var_group_count = 0 ;
87
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
84
88
}
85
89
86
90
return OPAL_SUCCESS ;
@@ -101,7 +105,9 @@ int mca_base_var_group_finalize(void)
101
105
}
102
106
OBJ_DESTRUCT (& mca_base_var_groups );
103
107
OBJ_DESTRUCT (& mca_base_var_group_index_hash );
108
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
104
109
mca_base_var_group_count = 0 ;
110
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
105
111
mca_base_var_group_initialized = false;
106
112
}
107
113
@@ -166,6 +172,7 @@ static bool compare_strings(const char *str1, const char *str2)
166
172
static int group_find_linear (const char * project_name , const char * framework_name ,
167
173
const char * component_name , bool invalidok )
168
174
{
175
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
169
176
for (int i = 0 ; i < mca_base_var_group_count ; ++ i ) {
170
177
mca_base_var_group_t * group ;
171
178
@@ -177,9 +184,11 @@ static int group_find_linear(const char *project_name, const char *framework_nam
177
184
if (compare_strings (project_name , group -> group_project )
178
185
&& compare_strings (framework_name , group -> group_framework )
179
186
&& compare_strings (component_name , group -> group_component )) {
187
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
180
188
return i ;
181
189
}
182
190
}
191
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
183
192
184
193
return OPAL_ERR_NOT_FOUND ;
185
194
}
@@ -239,7 +248,9 @@ static int group_register(const char *project_name, const char *framework_name,
239
248
return ret ;
240
249
}
241
250
group -> group_isvalid = true;
251
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
242
252
mca_base_var_groups_timestamp ++ ;
253
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
243
254
244
255
/* group already exists. return it's index */
245
256
return group_id ;
@@ -303,8 +314,10 @@ static int group_register(const char *project_name, const char *framework_name,
303
314
opal_hash_table_set_value_ptr (& mca_base_var_group_index_hash , group -> group_full_name ,
304
315
strlen (group -> group_full_name ), (void * ) (uintptr_t ) group_id );
305
316
317
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
306
318
mca_base_var_group_count ++ ;
307
319
mca_base_var_groups_timestamp ++ ;
320
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
308
321
309
322
if (0 <= parent_id ) {
310
323
mca_base_var_group_t * parent_group ;
@@ -402,7 +415,9 @@ int mca_base_var_group_deregister(int group_index)
402
415
/* ordering of variables and subgroups must be the same if the
403
416
* group is re-registered */
404
417
418
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
405
419
mca_base_var_groups_timestamp ++ ;
420
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
406
421
407
422
return OPAL_SUCCESS ;
408
423
}
@@ -441,7 +456,9 @@ int mca_base_var_group_add_var(const int group_index, const int param_index)
441
456
return ret ;
442
457
}
443
458
459
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
444
460
mca_base_var_groups_timestamp ++ ;
461
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
445
462
446
463
/* return the group index */
447
464
return (int ) opal_value_array_get_size (& group -> group_vars ) - 1 ;
@@ -470,7 +487,9 @@ int mca_base_var_group_add_pvar(const int group_index, const int param_index)
470
487
return ret ;
471
488
}
472
489
490
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
473
491
mca_base_var_groups_timestamp ++ ;
492
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
474
493
475
494
/* return the group index */
476
495
return (int ) opal_value_array_get_size (& group -> group_pvars ) - 1 ;
@@ -527,7 +546,9 @@ int mca_base_var_group_add_event (const int group_index, const int event_index)
527
546
return ret ;
528
547
}
529
548
549
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
530
550
mca_base_var_groups_timestamp ++ ;
551
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
531
552
532
553
/* return the group index */
533
554
return (int ) opal_value_array_get_size (& group -> group_events ) - 1 ;
@@ -608,10 +629,20 @@ static void mca_base_var_group_destructor(mca_base_var_group_t *group)
608
629
609
630
int mca_base_var_group_get_count (void )
610
631
{
611
- return mca_base_var_group_count ;
632
+ int ret ;
633
+
634
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
635
+ ret = mca_base_var_group_count ;
636
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
637
+ return ret ;
612
638
}
613
639
614
640
int mca_base_var_group_get_stamp (void )
615
641
{
616
- return mca_base_var_groups_timestamp ;
642
+ int ret ;
643
+
644
+ OPAL_THREAD_LOCK (& mca_base_var_group_lock );
645
+ ret = mca_base_var_groups_timestamp ;
646
+ OPAL_THREAD_UNLOCK (& mca_base_var_group_lock );
647
+ return ret ;
617
648
}
0 commit comments