@@ -28,7 +28,7 @@ PROTOTYPE VOID ialltoallw(BUFFER_ASYNC x1, COUNT_ARRAY sendcounts,
2828 COMM comm, REQUEST_OUT request)
2929{
3030 MPI_Comm c_comm = PMPI_Comm_f2c(*comm);
31- MPI_Datatype *c_sendtypes = NULL, *c_recvtypes;
31+ MPI_Datatype *c_sendtypes = NULL, *c_recvtypes = NULL ;
3232 MPI_Request c_request;
3333 int size, idx = 0, c_ierr;
3434 char *sendbuf = OMPI_CFI_BASE_ADDR(x1), *recvbuf = OMPI_CFI_BASE_ADDR(x2);
@@ -80,15 +80,24 @@ PROTOTYPE VOID ialltoallw(BUFFER_ASYNC x1, COUNT_ARRAY sendcounts,
8080 tmp_rdispls,
8181 c_recvtypes, c_comm, &c_request);
8282 if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
83- if (MPI_SUCCESS == c_ierr) *request = PMPI_Request_c2f(c_request);
83+ if (MPI_SUCCESS == c_ierr) {
84+ *request = PMPI_Request_c2f(c_request);
85+ ompi_coll_base_append_array_to_release(c_request, c_recvtypes);
86+ if (NULL != c_sendtypes) {
87+ ompi_coll_base_append_array_to_release(c_request, c_sendtypes);
88+ }
89+ } else {
90+ free(c_recvtypes);
91+ if (NULL != c_sendtypes) {
92+ free(c_sendtypes);
93+ }
94+ }
8495
8596 OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP_NONBLOCKING(sendcounts, tmp_sendcounts, c_request, c_ierr, idx);
8697 OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP_NONBLOCKING(sdispls, tmp_sdispls, c_request, c_ierr, idx);
87- OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP_NONBLOCKING(recvcounts, tmp_recvcounts, c_request, c_ierr, idx);;
98+ OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP_NONBLOCKING(recvcounts, tmp_recvcounts, c_request, c_ierr, idx);
8899 OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP_NONBLOCKING(rdispls, tmp_rdispls, c_request, c_ierr, idx);
89- ompi_coll_base_append_array_to_release(c_request, c_recvtypes);
90- if (NULL != c_sendtypes) {
91- ompi_coll_base_append_array_to_release(c_request, c_sendtypes);
100+ if (idx > 0) {
101+ ompi_coll_base_run_release_arrays_cb(c_request);
92102 }
93- ompi_coll_base_run_release_arrays_cb(c_request);
94103}
0 commit comments