@@ -89,6 +89,7 @@ libnbc_open(void)
8989
9090 OBJ_CONSTRUCT (& mca_coll_libnbc_component .requests , ompi_free_list_t );
9191 OBJ_CONSTRUCT (& mca_coll_libnbc_component .active_requests , opal_list_t );
92+ OBJ_CONSTRUCT (& mca_coll_libnbc_component .lock , opal_mutex_t );
9293 ret = ompi_free_list_init (& mca_coll_libnbc_component .requests ,
9394 sizeof (ompi_coll_libnbc_request_t ),
9495 OBJ_CLASS (ompi_coll_libnbc_request_t ),
@@ -116,6 +117,7 @@ libnbc_close(void)
116117
117118 OBJ_DESTRUCT (& mca_coll_libnbc_component .requests );
118119 OBJ_DESTRUCT (& mca_coll_libnbc_component .active_requests );
120+ OBJ_DESTRUCT (& mca_coll_libnbc_component .lock );
119121
120122 return OMPI_SUCCESS ;
121123}
@@ -240,21 +242,30 @@ ompi_coll_libnbc_progress(void)
240242{
241243 ompi_coll_libnbc_request_t * request , * next ;
242244
245+ /* return if invoked recursively */
243246 if (opal_atomic_trylock (& mca_coll_libnbc_component .progress_lock )) return 0 ;
244247
248+ /* process active requests, and use mca_coll_libnbc_component.lock to access the
249+ * mca_coll_libnbc_component.active_requests list */
250+ OPAL_THREAD_LOCK (& mca_coll_libnbc_component .lock );
245251 OPAL_LIST_FOREACH_SAFE (request , next , & mca_coll_libnbc_component .active_requests ,
246252 ompi_coll_libnbc_request_t ) {
253+ OPAL_THREAD_UNLOCK (& mca_coll_libnbc_component .lock );
247254 if (NBC_OK == NBC_Progress (request )) {
248255 /* done, remove and complete */
256+ OPAL_THREAD_LOCK (& mca_coll_libnbc_component .lock );
249257 opal_list_remove_item (& mca_coll_libnbc_component .active_requests ,
250258 & request -> super .super .super );
259+ OPAL_THREAD_UNLOCK (& mca_coll_libnbc_component .lock );
251260
252261 request -> super .req_status .MPI_ERROR = OMPI_SUCCESS ;
253262 OPAL_THREAD_LOCK (& ompi_request_lock );
254263 ompi_request_complete (& request -> super , true);
255264 OPAL_THREAD_UNLOCK (& ompi_request_lock );
256265 }
266+ OPAL_THREAD_LOCK (& mca_coll_libnbc_component .lock );
257267 }
268+ OPAL_THREAD_UNLOCK (& mca_coll_libnbc_component .lock );
258269
259270 opal_atomic_unlock (& mca_coll_libnbc_component .progress_lock );
260271
0 commit comments