On Mar 12, 2009, at 12:43 PM, Robert Latham wrote:
I'm using openmpi-1.3 in this example, linux, gcc-4.3.2, configured
with nothing special.
If I run the following simple C code under valgrind, single process, I
get some errors about reading and writing already-freed memory:
Hmm. This is an interesting case. You end up calling delete_fn()
(and therefore MPI_Keyval_free()) twice -- once on each communicator.
This definitely borks up OMPI's keyval reference counts and Badness
ensues.
Is is correct to call MPI_Keyval_free() multiple times on the same
keyval? I know you can call it "early", just like most other
MPI_*_FREE functions, but I didn't think you were allowed to call
MPI_Keyval_free() multiple times on the same keyval value...?
#include <mpi.h>
#include <stdlib.h>
int delete_fn(MPI_Comm comm, int keyval, void *attr, void *extra) {
MPI_Keyval_free(&keyval);
return 0;
}
int main (int argc, char **argv)
{
MPI_Comm duped;
int keyval;
MPI_Init(&argc, &argv);
MPI_Comm_dup(MPI_COMM_SELF, &duped);
MPI_Keyval_create(MPI_NULL_COPY_FN, delete_fn, &keyval,
NULL);
MPI_Attr_put(MPI_COMM_SELF, keyval, NULL);
MPI_Attr_put(duped, keyval, NULL);
MPI_Comm_free(&duped);
MPI_Finalize();
return 0;
}
--
Jeff Squyres
Cisco Systems