Skip to content

Commit 3862c74

Browse files
authored
Merge pull request #12105 from hppritcha/fix_for_issue12084
sessions: fix a problem with fortran interface
2 parents cb0496e + 50ca64c commit 3862c74

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
@@ -3998,57 +3998,58 @@ end subroutine ompi_neighbor_alltoallw_init_f
39983998
subroutine ompi_session_get_info_f(session, info, ierror) &
39993999
BIND(C, name="ompi_session_get_info_f")
40004000
implicit none
4001-
integer, intent(in) :: session
4002-
integer, intent(out) :: info
4003-
integer, intent(out) :: ierror
4001+
INTEGER, INTENT(IN) :: session
4002+
INTEGER, INTENT(out) :: info
4003+
INTEGER, INTENT(out) :: ierror
40044004
end subroutine ompi_session_get_info_f
40054005

4006-
subroutine ompi_session_get_nth_pset_f(session, info, n, pset_len, pset_name, ierror) &
4006+
subroutine ompi_session_get_nth_pset_f(session, info, n, pset_len, pset_name, ierror, pset_name_len) &
40074007
BIND(C, name="ompi_session_get_nth_pset_f")
4008-
use, intrinsic :: ISO_C_BINDING, only : C_CHAR
4008+
use, intrinsic :: ISO_C_BINDING, only : C_CHAR, C_INT
40094009
implicit none
4010-
integer, intent(in) :: session
4011-
integer, intent(in) :: info
4012-
integer, intent(in) :: n
4013-
integer, intent(inout) :: pset_len
4010+
INTEGER, INTENT(IN) :: session
4011+
INTEGER, INTENT(IN) :: info
4012+
INTEGER, INTENT(IN) :: n
4013+
INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: pset_name_len
4014+
INTEGER, INTENT(INOUT) :: pset_len
40144015
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: pset_name
4015-
integer, intent(out) :: ierror
4016+
INTEGER, INTENT(out) :: ierror
40164017
end subroutine ompi_session_get_nth_pset_f
40174018

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

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

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

40474048
subroutine ompi_session_finalize_f(session, ierror) &
4048-
BIND(C, name="ompi_session_finalize_f")
4049+
BIND(C, name="ompi_session_finalize_f")
40494050
implicit none
4050-
integer, intent(out) :: session
4051-
integer, intent(out) :: ierror
4051+
INTEGER, INTENT(out) :: session
4052+
INTEGER, INTENT(out) :: ierror
40524053
end subroutine ompi_session_finalize_f
40534054

40544055
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)