@@ -91,6 +91,7 @@ libnbc_open(void)
9191
9292 OBJ_CONSTRUCT (& mca_coll_libnbc_component .requests , opal_free_list_t );
9393 OBJ_CONSTRUCT (& mca_coll_libnbc_component .active_requests , opal_list_t );
94+ OBJ_CONSTRUCT (& mca_coll_libnbc_component .lock , opal_mutex_t );
9495 ret = opal_free_list_init (& mca_coll_libnbc_component .requests ,
9596 sizeof (ompi_coll_libnbc_request_t ), 8 ,
9697 OBJ_CLASS (ompi_coll_libnbc_request_t ),
@@ -115,6 +116,7 @@ libnbc_close(void)
115116
116117 OBJ_DESTRUCT (& mca_coll_libnbc_component .requests );
117118 OBJ_DESTRUCT (& mca_coll_libnbc_component .active_requests );
119+ OBJ_DESTRUCT (& mca_coll_libnbc_component .lock );
118120
119121 return OMPI_SUCCESS ;
120122}
@@ -261,15 +263,22 @@ ompi_coll_libnbc_progress(void)
261263 ompi_coll_libnbc_request_t * request , * next ;
262264 int res ;
263265
266+ /* return if invoked recursively */
264267 if (opal_atomic_trylock (& mca_coll_libnbc_component .progress_lock )) return 0 ;
265268
269+ /* process active requests, and use mca_coll_libnbc_component.lock to access the
270+ * mca_coll_libnbc_component.active_requests list */
271+ OPAL_THREAD_LOCK (& mca_coll_libnbc_component .lock );
266272 OPAL_LIST_FOREACH_SAFE (request , next , & mca_coll_libnbc_component .active_requests ,
267273 ompi_coll_libnbc_request_t ) {
274+ OPAL_THREAD_UNLOCK (& mca_coll_libnbc_component .lock );
268275 res = NBC_Progress (request );
269276 if ( NBC_CONTINUE != res ) {
270277 /* done, remove and complete */
278+ OPAL_THREAD_LOCK (& mca_coll_libnbc_component .lock );
271279 opal_list_remove_item (& mca_coll_libnbc_component .active_requests ,
272280 & request -> super .super .super );
281+ OPAL_THREAD_UNLOCK (& mca_coll_libnbc_component .lock );
273282
274283 if ( OMPI_SUCCESS == res || NBC_OK == res || NBC_SUCCESS == res ) {
275284 request -> super .req_status .MPI_ERROR = OMPI_SUCCESS ;
@@ -281,7 +290,9 @@ ompi_coll_libnbc_progress(void)
281290 ompi_request_complete (& request -> super , true);
282291 OPAL_THREAD_UNLOCK (& ompi_request_lock );
283292 }
293+ OPAL_THREAD_LOCK (& mca_coll_libnbc_component .lock );
284294 }
295+ OPAL_THREAD_UNLOCK (& mca_coll_libnbc_component .lock );
285296
286297 opal_atomic_unlock (& mca_coll_libnbc_component .progress_lock );
287298
0 commit comments