@@ -39,54 +39,33 @@ int ompi_coll_base_sendrecv_nonzero_actual( void* sendbuf, size_t scount,
3939                                             ompi_status_public_t *  status  )
4040
4141{ /* post receive first, then send, then waitall... should be fast (I hope) */ 
42-     int  err , line  =  0 ,  nreqs   =   0 ;
43-     size_t  typesize ;
44-     ompi_request_t *   reqs [ 2 ],  * * req   =   reqs ;
45-     ompi_status_public_t  statuses [ 2 ] ;
42+     int  err , line  =  0 ;
43+     size_t  rtypesize ,  stypesize ;
44+     ompi_request_t   * req ;
45+     ompi_status_public_t  rstatus ;
4646
4747    /* post new irecv */ 
48-     ompi_datatype_type_size (rdatatype , & typesize );
49-     if  (0  !=  rcount  &&  0  !=  typesize ) {
48+     ompi_datatype_type_size (rdatatype , & rtypesize );
49+     if  (0  !=  rcount  &&  0  !=  rtypesize ) {
5050        err  =  MCA_PML_CALL (irecv ( recvbuf , rcount , rdatatype , source , rtag ,
51-                                   comm , req ++ ));
52-         ++ nreqs ;
51+                                   comm , & req ));
5352        if  (err  !=  MPI_SUCCESS ) { line  =  __LINE__ ; goto error_handler ; }
5453    }
5554
5655    /* send data to children */ 
57-     ompi_datatype_type_size (sdatatype , & typesize );
58-     if  (0  !=  scount  &&  0  !=  typesize ) {
59-         err  =  MCA_PML_CALL (isend ( sendbuf , scount , sdatatype , dest , stag ,
60-                                   MCA_PML_BASE_SEND_STANDARD , comm , req ++ ));
61-         ++ nreqs ;
56+     ompi_datatype_type_size (sdatatype , & stypesize );
57+     if  (0  !=  scount  &&  0  !=  stypesize ) {
58+         err  =  MCA_PML_CALL (send ( sendbuf , scount , sdatatype , dest , stag ,
59+                                   MCA_PML_BASE_SEND_STANDARD , comm ));
6260        if  (err  !=  MPI_SUCCESS ) { line  =  __LINE__ ; goto error_handler ; }
6361    }
6462
65-     if  (0  !=  nreqs ) {
66-         err  =  ompi_request_wait_all ( nreqs , reqs , statuses  );
67-         if ( MPI_ERR_IN_STATUS  ==  err  ) { line  =  __LINE__ ;
68-             /* As we use wait_all we will get MPI_ERR_IN_STATUS which is not an error 
69-              * code that we can propagate up the stack. Instead, look for the real 
70-              * error code from the MPI_ERROR in the status. 
71-              */ 
72-             int  err_index  =  0 ;
73-             if ( MPI_SUCCESS  ==  statuses [0 ].MPI_ERROR 
74-              ||  MPI_ERR_PENDING  ==  statuses [0 ].MPI_ERROR  ) {
75-                 err_index  =  1 ;
76-             }
77-             if  (MPI_STATUS_IGNORE  !=  status ) {
78-                 * status  =  statuses [err_index ];
79-             }
80-             err  =  statuses [err_index ].MPI_ERROR ;
81-             OPAL_OUTPUT  ((ompi_coll_base_framework .framework_output , "%s:%d: Error %d occurred in the %s" 
82-                                                   " stage of ompi_coll_base_sendrecv_zero\n" ,
83-                           __FILE__ , line , err , (0  ==  err_index  ? "receive"  : "send" )));
84-             return  err ;
85-         }
63+     if  (0  !=  rcount  &&  0  !=  rtypesize ) {
64+         err  =  ompi_request_wait ( & req , & rstatus );
8665        if  (err  !=  MPI_SUCCESS ) { line  =  __LINE__ ; goto error_handler ; }
8766
8867        if  (MPI_STATUS_IGNORE  !=  status ) {
89-             * status  =  statuses [ 0 ] ;
68+             * status  =  rstatus ;
9069        }
9170    } else  {
9271        if ( MPI_STATUS_IGNORE  !=  status  )
@@ -96,7 +75,7 @@ int ompi_coll_base_sendrecv_nonzero_actual( void* sendbuf, size_t scount,
9675    return  (MPI_SUCCESS );
9776
9877 error_handler :
99-     /* Error discovered during the posting of the irecv or isend , 
78+     /* Error discovered during the posting of the irecv or send , 
10079     * and no status is available. 
10180     */ 
10281    OPAL_OUTPUT  ((ompi_coll_base_framework .framework_output , "%s:%d: Error %d occurred\n" ,
0 commit comments