X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8ca88f5944989c937734b5c28bfdd074aa990367..121c265b0b0c2fc035849a6050340bebf1e420e0:/src/smpi/bindings/smpi_pmpi_comm.cpp diff --git a/src/smpi/bindings/smpi_pmpi_comm.cpp b/src/smpi/bindings/smpi_pmpi_comm.cpp index 1624842b2e..b54e1b493b 100644 --- a/src/smpi/bindings/smpi_pmpi_comm.cpp +++ b/src/smpi/bindings/smpi_pmpi_comm.cpp @@ -1,4 +1,4 @@ -/* 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. */ @@ -108,6 +108,7 @@ int PMPI_Comm_free(MPI_Comm * comm) { 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; @@ -127,6 +128,8 @@ int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm* comm_out) { 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(); @@ -157,7 +160,7 @@ int PMPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int, MPI_Comm* comm_o MPI_Comm PMPI_Comm_f2c(MPI_Fint comm){ if(comm==-1) return MPI_COMM_NULL; - return static_cast(simgrid::smpi::Comm::f2c(comm)); + return simgrid::smpi::Comm::f2c(comm); } MPI_Fint PMPI_Comm_c2f(MPI_Comm comm){ @@ -206,6 +209,15 @@ int PMPI_Comm_free_keyval(int* keyval) { 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 @@ -261,7 +273,7 @@ int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE) return MPI_ERR_ARG; else - return comm->attr_put(keyval, attr_value); + return comm->attr_put(keyval, attr_value); } int PMPI_Errhandler_free(MPI_Errhandler* errhandler){ @@ -273,6 +285,7 @@ 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; } @@ -292,7 +305,9 @@ int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler){ 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; }