...
  MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &listwin);

  MPI_Win_create_keyval(MPI_WIN_NULL_COPY_FN,
                        MPI_WIN_NULL_DELETE_FN,
			&MPE_LISTWIN_KEY_RANK, (void*)0);
  MPI_Win_set_attr(listwin, MPE_LISTWIN_KEY_RANK,
                   (void*)(MPI_Aint)wrank);

  headDptr.rank = 0;
  if (wrank == 0) {
    ListElm *headLptr;
    MPI_Alloc_mem(sizeof(ListElm), MPI_INFO_NULL, &headLptr);
    MPI_Get_address(headLptr, &headDptr.disp);
    headLptr->next.rank = -1;
    headLptr->next.disp = (MPI_Aint)MPI_BOTTOM;
    MPI_Win_attach(listwin, headLptr, sizeof(ListElm));
  }
  MPI_Bcast(&headDptr.disp, 1, MPI_AINT, 0, MPI_COMM_WORLD);