-/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
{
CHECK_NULL(1, MPI_ERR_ARG, comm)
CHECK_COMM2(1, *comm)
+ CHECK_MPI_NULL(1, MPI_COMM_WORLD, MPI_ERR_COMM, *comm)
simgrid::smpi::Comm::destroy(*comm);
*comm = MPI_COMM_NULL;
return MPI_SUCCESS;
{
CHECK_NULL(4, MPI_ERR_ARG, comm_out)
CHECK_COMM2(1, comm)
+ if( color != MPI_UNDEFINED)//we use a negative value for MPI_UNDEFINED
+ CHECK_NEGATIVE(3, MPI_ERR_ARG, color)
smpi_bench_end();
*comm_out = comm->split(color, key);
smpi_bench_begin();
MPI_Comm PMPI_Comm_f2c(MPI_Fint comm){
if(comm==-1)
return MPI_COMM_NULL;
- return static_cast<MPI_Comm>(simgrid::smpi::Comm::f2c(comm));
+ return simgrid::smpi::Comm::f2c(comm);
}
MPI_Fint PMPI_Comm_c2f(MPI_Comm comm){
return PMPI_Keyval_free(keyval);
}
+int PMPI_Comm_test_inter(MPI_Comm comm, int* flag){
+ CHECK_COMM(1)
+
+ if(flag == nullptr)
+ return MPI_ERR_ARG;
+ *flag=false;
+ return MPI_SUCCESS;
+}
+
int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
CHECK_COMM(1)
if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM
||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE)
return MPI_ERR_ARG;
else
- return comm->attr_put<simgrid::smpi::Comm>(keyval, attr_value);
+ return comm->attr_put<simgrid::smpi::Comm>(keyval, attr_value);
}
int PMPI_Errhandler_free(MPI_Errhandler* errhandler){
int PMPI_Errhandler_create(MPI_Handler_function* function, MPI_Errhandler* errhandler){
CHECK_NULL(2, MPI_ERR_ARG, errhandler)
*errhandler=new simgrid::smpi::Errhandler(function);
+ (*errhandler)->add_f();
return MPI_SUCCESS;
}
int PMPI_Comm_call_errhandler(MPI_Comm comm,int errorcode){
CHECK_COMM(1)
- comm->errhandler()->call(comm, errorcode);
+ MPI_Errhandler err = comm->errhandler();
+ err->call(comm, errorcode);
+ simgrid::smpi::Errhandler::unref(err);
return MPI_SUCCESS;
}