Despite working for communicators and windows, setting a NULL attribute value in datatypes fails with MPI_ERR_ARG. Run the attached test case to reproduce.
-- Lisandro Dalcin ============ Research Scientist Computer, Electrical and Mathematical Sciences & Engineering (CEMSE) Numerical Porous Media Center (NumPor) King Abdullah University of Science and Technology (KAUST) http://numpor.kaust.edu.sa/ 4700 King Abdullah University of Science and Technology al-Khawarizmi Bldg (Bldg 1), Office # 4332 Thuwal 23955-6900, Kingdom of Saudi Arabia http://www.kaust.edu.sa Office Phone: +966 12 808-0459
#include <stdlib.h> #include <mpi.h> int main(int argc, char *argv[]) { int keyval; MPI_Win win = MPI_WIN_NULL; MPI_Comm comm = MPI_COMM_WORLD; MPI_Datatype datatype = MPI_BYTE; MPI_Init(&argc, &argv); MPI_Win_create_keyval(MPI_WIN_NULL_COPY_FN, MPI_WIN_NULL_DELETE_FN, &keyval, NULL); MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win); MPI_Win_set_attr(win, keyval, NULL); MPI_Win_delete_attr(win, keyval); MPI_Win_free(&win); MPI_Win_free_keyval(&keyval); MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN, MPI_COMM_NULL_DELETE_FN, &keyval, NULL); MPI_Comm_set_attr(comm, keyval, NULL); MPI_Comm_delete_attr(comm, keyval); MPI_Comm_free_keyval(&keyval); MPI_Type_create_keyval(MPI_TYPE_NULL_COPY_FN, MPI_TYPE_NULL_DELETE_FN, &keyval, NULL); MPI_Type_set_attr(datatype, keyval, NULL); MPI_Type_delete_attr(datatype, keyval); MPI_Type_free_keyval(&keyval); MPI_Finalize(); return 0; }