@@ -47,19 +47,17 @@ int ompi_sync_wait_mt(ompi_wait_sync_t *sync)
47
47
}
48
48
49
49
/* Insert sync on the list of pending synchronization constructs */
50
- if (num_thread_in_progress >= opal_max_thread_in_progress ) {
51
- OPAL_THREAD_LOCK (& wait_sync_lock );
52
- if ( NULL == wait_sync_list ) {
53
- sync -> next = sync -> prev = sync ;
54
- wait_sync_list = sync ;
55
- } else {
56
- sync -> prev = wait_sync_list -> prev ;
57
- sync -> prev -> next = sync ;
58
- sync -> next = wait_sync_list ;
59
- wait_sync_list -> prev = sync ;
60
- }
61
- OPAL_THREAD_UNLOCK (& wait_sync_lock );
50
+ OPAL_THREAD_LOCK (& wait_sync_lock );
51
+ if ( NULL == wait_sync_list ) {
52
+ sync -> next = sync -> prev = sync ;
53
+ wait_sync_list = sync ;
54
+ } else {
55
+ sync -> prev = wait_sync_list -> prev ;
56
+ sync -> prev -> next = sync ;
57
+ sync -> next = wait_sync_list ;
58
+ wait_sync_list -> prev = sync ;
62
59
}
60
+ OPAL_THREAD_UNLOCK (& wait_sync_lock );
63
61
64
62
/**
65
63
* If we are not responsible for progresing, go silent until something worth noticing happen:
@@ -91,23 +89,18 @@ int ompi_sync_wait_mt(ompi_wait_sync_t *sync)
91
89
}
92
90
OPAL_THREAD_ADD_FETCH32 (& num_thread_in_progress , -1 );
93
91
94
- if (NULL != wait_sync_list ) {
95
- assert (sync == wait_sync_list );
96
- }
97
-
98
92
i_am_done :
99
93
/* My sync is now complete. Trim the list: remove self, wake next */
100
- if (num_thread_in_progress >= opal_max_thread_in_progress ) {
101
- OPAL_THREAD_LOCK (& wait_sync_lock );
102
- sync -> prev -> next = sync -> next ;
103
- sync -> next -> prev = sync -> prev ;
104
- /* In case I am the progress manager, pass the duties on */
105
- if ( sync == wait_sync_list ) {
106
- wait_sync_list = (sync == sync -> next ) ? NULL : sync -> next ;
107
- if ( NULL != wait_sync_list )
108
- WAIT_SYNC_PASS_OWNERSHIP (wait_sync_list );
109
- }
110
- OPAL_THREAD_UNLOCK (& wait_sync_lock );
94
+ OPAL_THREAD_LOCK (& wait_sync_lock );
95
+ sync -> prev -> next = sync -> next ;
96
+ sync -> next -> prev = sync -> prev ;
97
+ /* In case I am the progress manager, pass the duties on */
98
+ if ( sync == wait_sync_list ) {
99
+ wait_sync_list = (sync == sync -> next ) ? NULL : sync -> next ;
100
+ if ( NULL != wait_sync_list )
101
+ WAIT_SYNC_PASS_OWNERSHIP (wait_sync_list );
111
102
}
103
+ OPAL_THREAD_UNLOCK (& wait_sync_lock );
104
+
112
105
return (0 == sync -> status ) ? OPAL_SUCCESS : OPAL_ERROR ;
113
106
}
0 commit comments