1515 * Copyright (c) 2012 Oak Ridge National Labs. All rights reserved.
1616 * Copyright (c) 2016 Los Alamos National Security, LLC. All rights
1717 * reserved.
18+ * Copyright (c) 2016 Mellanox Technologies. All rights reserved.
1819 * $COPYRIGHT$
1920 *
2021 * Additional copyrights may follow
@@ -116,7 +117,8 @@ int ompi_request_default_wait_any(size_t count,
116117 if (MPI_STATUS_IGNORE != status ) {
117118 * status = ompi_status_empty ;
118119 }
119- WAIT_SYNC_RELEASE (& sync );
120+ /* No signal-in-flight can be in this case */
121+ WAIT_SYNC_RELEASE_NOWAIT (& sync );
120122 return rc ;
121123 }
122124
@@ -140,6 +142,15 @@ int ompi_request_default_wait_any(size_t count,
140142 * index = i ;
141143 }
142144 }
145+
146+ if ( * index == completed ){
147+ /* Only one request has triggered. There was no
148+ * in-flight completions.
149+ * Drop the signalled flag so we won't block
150+ * in WAIT_SYNC_RELEASE
151+ */
152+ WAIT_SYNC_SIGNALLED (& sync );
153+ }
143154
144155 request = requests [* index ];
145156 assert ( REQUEST_COMPLETE (request ) );
@@ -348,7 +359,8 @@ int ompi_request_default_wait_some(size_t count,
348359 ompi_request_t * * rptr = NULL ;
349360 ompi_request_t * request = NULL ;
350361 ompi_wait_sync_t sync ;
351-
362+ size_t sync_sets = 0 , sync_unsets = 0 ;
363+
352364 WAIT_SYNC_INIT (& sync , 1 );
353365
354366 * outcount = 0 ;
@@ -373,10 +385,12 @@ int ompi_request_default_wait_some(size_t count,
373385 num_requests_done ++ ;
374386 }
375387 }
388+ sync_sets = count - num_requests_null_inactive - num_requests_done ;
376389
377390 if (num_requests_null_inactive == count ) {
378391 * outcount = MPI_UNDEFINED ;
379- WAIT_SYNC_RELEASE (& sync );
392+ /* nobody will signall us */
393+ WAIT_SYNC_RELEASE_NOWAIT (& sync );
380394 return rc ;
381395 }
382396
@@ -407,6 +421,14 @@ int ompi_request_default_wait_some(size_t count,
407421 num_requests_done ++ ;
408422 }
409423 }
424+ sync_unsets = count - num_requests_null_inactive - num_requests_done ;
425+
426+ if ( sync_sets == sync_unsets ){
427+ /* nobody knows about us,
428+ * set signa-in-progress flag to false
429+ */
430+ WAIT_SYNC_SIGNALLED (& sync );
431+ }
410432
411433 WAIT_SYNC_RELEASE (& sync );
412434
0 commit comments