From: Augustin Degomme Date: Tue, 6 Apr 2021 15:39:50 +0000 (+0200) Subject: add a name() to all F2C objects. X-Git-Tag: v3.28~455^2~131 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/64c28d32b91d8179bdc12a920976a6f919729beb add a name() to all F2C objects. This avoids demangling need for leak check (and should fix tests, as freebsd has a broken demangler on our ci system). --- diff --git a/src/smpi/include/smpi_comm.hpp b/src/smpi/include/smpi_comm.hpp index cee159a90a..0ca688da18 100644 --- a/src/smpi/include/smpi_comm.hpp +++ b/src/smpi/include/smpi_comm.hpp @@ -54,6 +54,7 @@ public: int rank() const; int id() const; void get_name(char* name, int* len) const; + std::string name() const; void set_name(const char* name); MPI_Info info(); void set_info( MPI_Info info); diff --git a/src/smpi/include/smpi_datatype.hpp b/src/smpi/include/smpi_datatype.hpp index 294e617381..06a106bbd3 100644 --- a/src/smpi/include/smpi_datatype.hpp +++ b/src/smpi/include/smpi_datatype.hpp @@ -127,8 +127,7 @@ public: Datatype(const Datatype&) = delete; Datatype& operator=(const Datatype&) = delete; ~Datatype() override; - - const char* name() const { return name_.c_str(); } + std::string name() const {return name_;} size_t size() const { return size_; } MPI_Aint lb() const { return lb_; } MPI_Aint ub() const { return ub_; } diff --git a/src/smpi/include/smpi_errhandler.hpp b/src/smpi/include/smpi_errhandler.hpp index 54f5f6544d..fb8565945c 100644 --- a/src/smpi/include/smpi_errhandler.hpp +++ b/src/smpi/include/smpi_errhandler.hpp @@ -25,6 +25,7 @@ class Errhandler: public F2C { explicit Errhandler(MPI_File_errhandler_fn *function):file_func_(function){}; explicit Errhandler(MPI_Win_errhandler_fn *function):win_func_(function){}; void ref(); + std::string name() const {return "MPI_Errhandler";} void call(MPI_Comm comm, int errorcode) const; void call(MPI_Win win, int errorcode) const; void call(MPI_File file, int errorcode) const; diff --git a/src/smpi/include/smpi_f2c.hpp b/src/smpi/include/smpi_f2c.hpp index fa915c425c..4c6ca1b938 100644 --- a/src/smpi/include/smpi_f2c.hpp +++ b/src/smpi/include/smpi_f2c.hpp @@ -36,13 +36,14 @@ protected: int f2c_id() { return my_f2c_id_; } static int global_f2c_id() { return f2c_id_; } static void f2c_id_increment() { f2c_id_++; } - void mark_as_deleted() { deleted_ = true; }; public: + void mark_as_deleted() { deleted_ = true; }; bool deleted() const { return deleted_; } static f2c_lookup_type* lookup() { return f2c_lookup_.get(); } F2C(); virtual ~F2C() = default; + virtual std::string name() const = 0; int add_f(); static void free_f(int id) { if(id!=-1) f2c_lookup_->erase(id); } diff --git a/src/smpi/include/smpi_file.hpp b/src/smpi/include/smpi_file.hpp index 1d7360545f..dc95b2c4fc 100644 --- a/src/smpi/include/smpi_file.hpp +++ b/src/smpi/include/smpi_file.hpp @@ -42,6 +42,8 @@ class File : public F2C{ int get_position_shared(MPI_Offset* offset) const; int flags() const; MPI_Comm comm() const; + std::string name() const {return file_ ? std::string("MPI_File:" + file_->get_path()): std::string("MPI_File");} + int sync(); int seek(MPI_Offset offset, int whence); int seek_shared(MPI_Offset offset, int whence); diff --git a/src/smpi/include/smpi_group.hpp b/src/smpi/include/smpi_group.hpp index 83a531f895..c3ef76107e 100644 --- a/src/smpi/include/smpi_group.hpp +++ b/src/smpi/include/smpi_group.hpp @@ -34,6 +34,7 @@ public: void set_mapping(s4u::Actor* actor, int rank); int rank(int index); s4u::Actor* actor(int rank); + std::string name() const {return std::string("MPI_Group");} int rank(s4u::Actor* process); void ref(); static void unref(MPI_Group group); diff --git a/src/smpi/include/smpi_info.hpp b/src/smpi/include/smpi_info.hpp index df50447cbe..4650a83f51 100644 --- a/src/smpi/include/smpi_info.hpp +++ b/src/smpi/include/smpi_info.hpp @@ -26,6 +26,7 @@ public: static void unref(MPI_Info info); void set(const char* key, const char* value) { map_[key] = value; } int get(const char* key, int valuelen, char* value, int* flag) const; + std::string name() const {return std::string("MPI_Info");} int remove(const char* key); int get_nkeys(int* nkeys) const; int get_nthkey(int n, char* key) const; diff --git a/src/smpi/include/smpi_op.hpp b/src/smpi/include/smpi_op.hpp index bfb1e7d8c9..58980e8d25 100644 --- a/src/smpi/include/smpi_op.hpp +++ b/src/smpi/include/smpi_op.hpp @@ -26,6 +26,7 @@ public: bool is_predefined() const { return is_predefined_; } bool is_fortran_op() const { return is_fortran_op_; } int allowed_types() const { return types_; } + std::string name() const {return std::string("MPI_Op");} // tell that we were created from fortran, so we need to translate the type to fortran when called void set_fortran_op() { is_fortran_op_ = true; } void apply(const void* invec, void* inoutvec, const int* len, MPI_Datatype datatype) const; diff --git a/src/smpi/include/smpi_request.hpp b/src/smpi/include/smpi_request.hpp index 226094de7b..9f2f86410f 100644 --- a/src/smpi/include/smpi_request.hpp +++ b/src/smpi/include/smpi_request.hpp @@ -64,6 +64,7 @@ public: int tag() const { return tag_; } int flags() const { return flags_; } bool detached() const { return detached_; } + std::string name() const {return std::string("MPI_Request");} MPI_Datatype type() const { return old_type_; } void print_request(const char* message) const; void start(); diff --git a/src/smpi/include/smpi_win.hpp b/src/smpi/include/smpi_win.hpp index 5022f6eeb4..e638736948 100644 --- a/src/smpi/include/smpi_win.hpp +++ b/src/smpi/include/smpi_win.hpp @@ -54,6 +54,7 @@ public: int attach (void *base, MPI_Aint size); int detach (const void *base); void get_name(char* name, int* length) const; + std::string name() const {return name_;} void get_group( MPI_Group* group); void set_name(const char* name); int rank() const; diff --git a/src/smpi/internals/smpi_utils.cpp b/src/smpi/internals/smpi_utils.cpp index 062ff2d508..791bf56f69 100644 --- a/src/smpi/internals/smpi_utils.cpp +++ b/src/smpi/internals/smpi_utils.cpp @@ -156,7 +156,7 @@ void print_memory_analysis() if (xbt_log_no_loc) { XBT_WARN("Leaked handle of type %s", boost::core::demangle(typeid(*p.second).name()).c_str()); } else { - XBT_WARN("Leaked handle of type %s at %p", boost::core::demangle(typeid(*p.second).name()).c_str(), p.second); + XBT_WARN("Leaked handle of type %s at %p", p.second->name().c_str(), p.second); } } if (truncate) diff --git a/src/smpi/mpi/smpi_comm.cpp b/src/smpi/mpi/smpi_comm.cpp index 117d76f8b6..ce496d29e4 100644 --- a/src/smpi/mpi/smpi_comm.cpp +++ b/src/smpi/mpi/smpi_comm.cpp @@ -178,6 +178,15 @@ void Comm::get_name(char* name, int* len) const } } +std::string Comm::name() const +{ + int size; + char name[MPI_MAX_NAME_STRING]; + this->get_name(name, &size); + return std::string(name); +} + + void Comm::set_name (const char* name) { if (this == MPI_COMM_UNINITIALIZED){ diff --git a/src/smpi/mpi/smpi_op.cpp b/src/smpi/mpi/smpi_op.cpp index 9b2bf1b562..5ec47aa8eb 100644 --- a/src/smpi/mpi/smpi_op.cpp +++ b/src/smpi/mpi/smpi_op.cpp @@ -116,7 +116,7 @@ APPLY_OP_LOOP(MPI_COMPLEX32, double_double,op) #define APPLY_END_OP_LOOP(op) \ { \ - xbt_die("Failed to apply " _XBT_STRINGIFY(op) " to type %s", (*datatype)->name()); \ + xbt_die("Failed to apply " _XBT_STRINGIFY(op) " to type %s", (*datatype)->name().c_str()); \ } static void max_func(void *a, void *b, int *length, MPI_Datatype * datatype)