Based on my understanding of the MPI standard, the attribute copy and
delete functions have to be called every time we duplicate or free a
communicator (if the attribute is attached to it). As in this
particular case, the copy function is empty (redirected to
MPI_NULL_COPY_FN) it should be illegal for the user to call
MPI_Keyval_free until the last reference to the attribute is gone. To
be more specific, if we kept a reference count on the keyval, your
code will not be correct because as a user you will only get one
reference count and you release this keyval twice (without talking
about the fact that we are not supposed to give you the keyval the
second time as you already free it in the first call to delete_fn).
I tend to say that if someone should have reference counts in this
particular case, is the user.
george.
On Mar 14, 2009, at 08:53 , Jeff Squyres wrote:
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
_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users