[mpich-discuss] [PATCH v2] test: add attrdeleteget, MPI_Attr_get called from delete_fn

Fab Tillier ftillier at microsoft.com
Sat May 18 01:45:08 CDT 2013


Hi Jed, Satish,

Comments inline to the code.

Cheers,
-Fab

Jed Brown wrote on Fri, 17 May 2013 at 21:52:38

>With MS-MPI 64-bit from HPC Pack 2008 and 2012, MPI_Attr_get returns
>error code 773 when called from delete_fn on a communicator obtained
>from MPI_Comm_split.
>
>Signed-off-by: Jed Brown <jedbrown at mcs.anl.gov>
>Signed-off-by: Satish Balay <balay at mcs.anl.gov>
>---
>Updated to propagate the error code from MPI_Attr_get.

<snip>

>diff --git a/test/mpi/attr/attrdeleteget.c b/test/mpi/attr/attrdeleteget.c
>new file mode 100644
>index 0000000..05afaa4
>--- /dev/null
>+++ b/test/mpi/attr/attrdeleteget.c
>@@ -0,0 +1,36 @@
>+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
>+/*
>+ *
>+ *  (C) 2013 by Argonne National Laboratory.
>+ *      See COPYRIGHT in top-level directory.
>+ */
>+
>+#include <stdio.h>
>+#include "mpi.h"
>+#include "mpitest.h"
>+
>+int key = MPI_KEYVAL_INVALID;
>+char a[100];
>+
>+int delete_fn (MPI_Comm, int, void *, void *);
>+
>+int main(int argc,char **argv)
>+{
>+  MPI_Comm scomm;
>+
>+  MTest_Init(&argc,&argv);
>+  MPI_Comm_split(MPI_COMM_WORLD,1,0,&scomm);
>+  MPI_Keyval_create(MPI_NULL_COPY_FN,delete_fn,&key,(void*)0);
>+  MPI_Attr_put(scomm,key,a);
>+  MPI_Comm_free(&scomm);

The communicator handle will become invalid at some point after you call MPI_Comm_free (but before the call returns).  I didn't see in the standard any mention of whether using the communicator in the destroy callback is acceptable.  There's the usual vague notion of the call to MPI_Comm_free being erroneous if the delete callback fails.

>+  MPI_Finalize();
>+  return 0;
>+}
>+
>+int delete_fn(MPI_Comm comm,int keyval,void *attr_val,void *extra_state)
>+{
>+  int   flg;
>+  void  *ptr;
>+
>+  return MPI_Attr_get(comm,key,&ptr,&flg);

Why aren't you using attr_val and extra_state here, rather than calling MPI_Attr_get?  Is this just a symptom of the test case being reduced, and the original code attempts to access a different attribute on that communicator?

I'd like to understand the original use case better, though, if you don't mind.

>+}



More information about the discuss mailing list