George Bosilca <bosilca_at_[hidden]> writes:
>> No. The Fortran status must __always__ be 6, because we need enough room to correctly convert the 3 useful variables to Fortran, plus copy the rest of the hidden things.These 6 type will be INTEGER (which will then be different than the C int). The C<->F stuff will do not a memcpy but copy all elements while casting to the correct Fortran type (ompi_fortran_integer_t).
>> The fact that we are talking about 3 integers in the Fortran status might explain the segfault. This number should never be 3 it should be ALWAYS 6 or the function MPI_Status_c2f will clearly overwrite the memory.
> I did manage to try this idea on an -i8 enabled Open MPI version. The test application provided on one of the early email successfully complete without the segfault and with a correct output.
> node= 0 and size= 2 : Hello
> node= 1 and size= 2 : Hello
> Iam = 1 and my temp value is = 1
> Iam = 0 and my temp value is = 1
> So the fix is trivial, make MPI_STATUS_SIZE always equal to sizeof(MPI_Status)/sizeof(int). Everything else is already taken care of by the current Fortran <-> C infrastructure.
This doesn't seem to have been fixed, and I think it's going to bite
here. Is this the right change?
--- openmpi-1.6.5/ompi/config/ompi_setup_mpi_fortran.m4~ 2012-04-03 15:30:24.000000000 +0100
+++ openmpi-1.6.5/ompi/config/ompi_setup_mpi_fortran.m4 2013-12-10 12:23:54.232854527 +0000
@@ -127,8 +127,8 @@
AC_MSG_RESULT([skipped (no Fortran bindings)])
bytes=`expr 4 \* $ac_cv_sizeof_int + $ac_cv_sizeof_size_t`
- num_integers=`expr $bytes / $OMPI_SIZEOF_FORTRAN_INTEGER`
- sanity=`expr $num_integers \* $OMPI_SIZEOF_FORTRAN_INTEGER`
+ num_integers=`expr $bytes / $ac_cv_sizeof_int`
+ sanity=`expr $num_integers \* $ac_cv_sizeof_int`
AS_IF([test "$sanity" != "$bytes"],
AC_MSG_WARN([WARNING: Size of C int: $ac_cv_sizeof_int])