Skip to content

Commit 2ba4104

Browse files
authored
Merge pull request #12126 from hppritcha/fix_for_issue1208_v50x
v5.0.x: sessions: fix a problem with fortran interface
2 parents 3935a0a + 409add2 commit 2ba4104

File tree

4 files changed

+41
-34
lines changed

4 files changed

+41
-34
lines changed

ompi/mpi/fortran/mpif-h/prototypes_mpi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ PN2(void, MPI_Session_call_errhandler, mpi_session_call_errhandler, MPI_SESSION_
393393
PN2(void, MPI_Session_create_errhandler, mpi_session_create_errhandler, MPI_SESSION_CREATE_ERRHANDLER, (ompi_errhandler_fortran_handler_fn_t* function, MPI_Fint *errhandler, MPI_Fint *ierr));
394394
PN2(void, MPI_Session_get_errhandler, mpi_session_get_errhandler, MPI_SESSION_GET_ERRHANDLER, (MPI_Fint *session, MPI_Fint *erhandler, MPI_Fint *ierr));
395395
PN2(void, MPI_Session_get_info, mpi_session_get_info, MPI_SESSION_GET_INFO, (MPI_Fint *session, MPI_Fint *info, MPI_Fint *ierr));
396-
PN2(void, MPI_Session_get_nth_pset, mpi_session_get_nth_pset, MPI_SESSION_GET_NTH_PSET, (MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr));
396+
PN2(void, MPI_Session_get_nth_pset, mpi_session_get_nth_pset, MPI_SESSION_GET_NTH_PSET, (MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr, int pset_name_len));
397397
PN2(void, MPI_Session_get_num_psets, mpi_session_get_num_psets, MPI_SESSION_GET_NUM_PSETS, (MPI_Fint *session, MPI_Fint *info, MPI_Fint *npset_names, MPI_Fint *ierr));
398398
PN2(void, MPI_Session_get_pset_info, mpi_session_get_pset_info, MPI_SESSION_GET_PSET_INFO, (MPI_Fint *session, char *pset_name, MPI_Fint *info, MPI_Fint *ierr, int name_len));
399399
PN2(void, MPI_Session_init, mpi_session_init, MPI_SESSION_INIT, (MPI_Fint *info, MPI_Fint *errhandler, MPI_Fint *session, MPI_Fint *ierr));

ompi/mpi/fortran/mpif-h/session_get_nth_pset_f.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_SESSION_GET_NTH_PSET,
4646
pmpi_session_get_nth_pset_,
4747
pmpi_session_get_nth_pset__,
4848
pompi_session_get_nth_pset_f,
49-
(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr),
50-
(session, info, n, pset_len, pset_name, ierr))
49+
(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr, int pset_name_len),
50+
(session, info, n, pset_len, pset_name, ierr, pset_name_len))
5151
#endif
5252
#endif
5353

@@ -66,14 +66,15 @@ OMPI_GENERATE_F77_BINDINGS (MPI_SESSION_GET_NTH_PSET,
6666
mpi_session_get_nth_pset_,
6767
mpi_session_get_nth_pset__,
6868
ompi_session_get_nth_pset_f,
69-
(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr),
70-
(session, info, n, pset_len, pset_name, ierr))
69+
(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr, int pset_name_len),
70+
(session, info, n, pset_len, pset_name, ierr, pset_name_len))
7171
#else
7272
#define ompi_session_get_nth_pset_f pompi_session_get_nth_pset_f
7373
#endif
7474
#endif
7575

76-
void ompi_session_get_nth_pset_f(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr)
76+
void ompi_session_get_nth_pset_f(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n, MPI_Fint *pset_len, char *pset_name, MPI_Fint *ierr,
77+
int pset_name_len)
7778
{
7879
int c_ierr;
7980
MPI_Session c_session;
@@ -94,8 +95,12 @@ void ompi_session_get_nth_pset_f(MPI_Fint *session, MPI_Fint *info, MPI_Fint *n,
9495
c_ierr = PMPI_Session_get_nth_pset(c_session, MPI_INFO_NULL, *n,
9596
OMPI_SINGLE_NAME_CONVERT(pset_len),
9697
c_name);
98+
/*
99+
* use pset_name_len as that is the length of the supplied pset_name
100+
* otherwise there may be gibberish characters past *pset_len
101+
*/
97102
if (MPI_SUCCESS == c_ierr) {
98-
ompi_fortran_string_c2f(c_name, pset_name, *pset_len);
103+
ompi_fortran_string_c2f(c_name, pset_name, pset_name_len);
99104
}
100105
}
101106

ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3997,57 +3997,58 @@ end subroutine ompi_neighbor_alltoallw_init_f
39973997
subroutine ompi_session_get_info_f(session, info, ierror) &
39983998
BIND(C, name="ompi_session_get_info_f")
39993999
implicit none
4000-
integer, intent(in) :: session
4001-
integer, intent(out) :: info
4002-
integer, intent(out) :: ierror
4000+
INTEGER, INTENT(IN) :: session
4001+
INTEGER, INTENT(out) :: info
4002+
INTEGER, INTENT(out) :: ierror
40034003
end subroutine ompi_session_get_info_f
40044004

4005-
subroutine ompi_session_get_nth_pset_f(session, info, n, pset_len, pset_name, ierror) &
4005+
subroutine ompi_session_get_nth_pset_f(session, info, n, pset_len, pset_name, ierror, pset_name_len) &
40064006
BIND(C, name="ompi_session_get_nth_pset_f")
4007-
use, intrinsic :: ISO_C_BINDING, only : C_CHAR
4007+
use, intrinsic :: ISO_C_BINDING, only : C_CHAR, C_INT
40084008
implicit none
4009-
integer, intent(in) :: session
4010-
integer, intent(in) :: info
4011-
integer, intent(in) :: n
4012-
integer, intent(inout) :: pset_len
4009+
INTEGER, INTENT(IN) :: session
4010+
INTEGER, INTENT(IN) :: info
4011+
INTEGER, INTENT(IN) :: n
4012+
INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: pset_name_len
4013+
INTEGER, INTENT(INOUT) :: pset_len
40134014
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: pset_name
4014-
integer, intent(out) :: ierror
4015+
INTEGER, INTENT(out) :: ierror
40154016
end subroutine ompi_session_get_nth_pset_f
40164017

40174018
subroutine ompi_session_get_num_psets_f(session, info, npset_names, ierror) &
40184019
BIND(C, name="ompi_session_get_num_psets_f")
4019-
implicit none
4020-
integer, intent(in) :: session
4021-
integer, intent(in) :: info
4022-
integer, intent(out) :: npset_names
4023-
integer, intent(out) :: ierror
4020+
implicit none
4021+
INTEGER, INTENT(IN) :: session
4022+
INTEGER, INTENT(IN) :: info
4023+
INTEGER, INTENT(out) :: npset_names
4024+
INTEGER, INTENT(out) :: ierror
40244025
end subroutine ompi_session_get_num_psets_f
40254026

40264027
subroutine ompi_session_get_pset_info_f(session, pset_name, info, ierror, name_len) &
40274028
BIND(C, name="ompi_session_get_pset_info_f")
40284029
use, intrinsic :: ISO_C_BINDING, only : C_CHAR
40294030
implicit none
4030-
integer, intent(in) :: session
4031+
INTEGER, INTENT(IN) :: session
40314032
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: pset_name
40324033
INTEGER, VALUE, INTENT(IN) :: name_len
4033-
integer, intent(out) :: info
4034-
integer, intent(out) :: ierror
4034+
INTEGER, INTENT(out) :: info
4035+
INTEGER, INTENT(out) :: ierror
40354036
end subroutine ompi_session_get_pset_info_f
40364037

40374038
subroutine ompi_session_init_f(info, errhandler, session, ierror) &
40384039
BIND(C, name="ompi_session_init_f")
4039-
implicit none
4040-
integer, intent(in) :: info
4041-
integer, intent(in) :: errhandler
4042-
integer, intent(out) :: session
4043-
integer, intent(out) :: ierror
4040+
implicit none
4041+
INTEGER, INTENT(IN) :: info
4042+
INTEGER, INTENT(IN) :: errhandler
4043+
INTEGER, INTENT(out) :: session
4044+
INTEGER, INTENT(out) :: ierror
40444045
end subroutine ompi_session_init_f
40454046

40464047
subroutine ompi_session_finalize_f(session, ierror) &
4047-
BIND(C, name="ompi_session_finalize_f")
4048+
BIND(C, name="ompi_session_finalize_f")
40484049
implicit none
4049-
integer, intent(out) :: session
4050-
integer, intent(out) :: ierror
4050+
INTEGER, INTENT(out) :: session
4051+
INTEGER, INTENT(out) :: ierror
40514052
end subroutine ompi_session_finalize_f
40524053

40534054
subroutine ompi_session_call_errhandler_f(session,errorcode,ierror) &

ompi/mpi/fortran/use-mpi-f08/session_get_nth_pset_f08.F90

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ subroutine MPI_Session_get_nth_pset_f08(session, info, n, pset_len, pset_name, i
2323
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
2424
integer :: c_ierror
2525

26-
call ompi_session_get_nth_pset_f(session%MPI_VAL, MPI_INFO_NULL%MPI_VAL, n, pset_len, pset_name, c_ierror)
26+
call ompi_session_get_nth_pset_f(session%MPI_VAL, MPI_INFO_NULL%MPI_VAL, n, &
27+
pset_len, pset_name, c_ierror, len(pset_name))
2728
if (present(ierror)) ierror = c_ierror
2829

2930
end subroutine MPI_Session_get_nth_pset_f08

0 commit comments

Comments
 (0)