@@ -30,7 +30,7 @@ PROTOTYPE VOID alltoallw(BUFFER x1, COUNT_ARRAY sendcounts,
3030 int size, c_ierr;
3131 MPI_Comm c_comm = PMPI_Comm_f2c(*comm);
3232 char *sendbuf = OMPI_CFI_BASE_ADDR(x1), *recvbuf = OMPI_CFI_BASE_ADDR(x2);
33- MPI_Datatype *c_sendtypes = NULL, *c_recvtypes;
33+ MPI_Datatype *c_sendtypes = NULL, *c_recvtypes = NULL ;
3434 @COUNT_TYPE@ *tmp_sendcounts = NULL;
3535 @DISP_TYPE@ *tmp_sdispls = NULL;
3636 @COUNT_TYPE@ *tmp_recvcounts = NULL;
@@ -59,7 +59,7 @@ PROTOTYPE VOID alltoallw(BUFFER x1, COUNT_ARRAY sendcounts,
5959 if (MPI_SUCCESS != c_ierr) {
6060 if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
6161 OMPI_ERRHANDLER_INVOKE(c_comm, c_ierr, FUNC_NAME)
62- return ;
62+ goto fn_exit ;
6363 }
6464
6565 c_recvtypes = (MPI_Datatype *) malloc(size * sizeof(MPI_Datatype));
@@ -84,6 +84,7 @@ PROTOTYPE VOID alltoallw(BUFFER x1, COUNT_ARRAY sendcounts,
8484 c_recvtypes, c_comm);
8585 if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
8686
87+ fn_exit:
8788 OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP(sendcounts, tmp_sendcounts);
8889 OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP(sdispls, tmp_sdispls);
8990 OMPI_FORTRAN_BIGCOUNT_ARRAY_CLEANUP(recvcounts, tmp_recvcounts);
@@ -92,5 +93,7 @@ PROTOTYPE VOID alltoallw(BUFFER x1, COUNT_ARRAY sendcounts,
9293 if (NULL != c_sendtypes) {
9394 free(c_sendtypes);
9495 }
95- free(c_recvtypes);
96+ if (NULL != c_recvtypes) {
97+ free(c_recvtypes);
98+ }
9699}
0 commit comments