From 4be24d86416854b0f898f8058b88a4d22c8bcb8e Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Fri, 15 Sep 2017 07:48:35 +0200 Subject: [PATCH 1/1] instr: fix a new/free mismatch, and small cleanups - name a destructor by its name - inline a useless recursive function: by doing the job in the destructor --- src/instr/instr_config.cpp | 2 +- src/instr/instr_paje_types.cpp | 28 ++++++++++------------------ src/instr/instr_private.h | 4 +--- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index 9e5889a446..cf20d44e74 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -143,7 +143,7 @@ int TRACE_end() /* destroy all data structures of tracing (and free) */ PJ_container_free_all(); - recursiveDestroyType (PJ_type_get_root()); + delete PJ_type_get_root(); rootType = nullptr; /* close the trace files */ diff --git a/src/instr/instr_paje_types.cpp b/src/instr/instr_paje_types.cpp index 73ce50ee87..cdccdcf719 100644 --- a/src/instr/instr_paje_types.cpp +++ b/src/instr/instr_paje_types.cpp @@ -41,33 +41,25 @@ simgrid::instr::Type::Type(const char* typeNameBuff, const char* key, const char } } -void PJ_type_free(simgrid::instr::Type* type) +simgrid::instr::Type::~Type() { simgrid::instr::Value* val; char *value_name; xbt_dict_cursor_t cursor = nullptr; - xbt_dict_foreach (type->values_, cursor, value_name, val) { + xbt_dict_foreach (values_, cursor, value_name, val) { XBT_DEBUG("free value %s, child of %s", val->name_, val->father_->name_); - xbt_free(val); + delete val; } - xbt_dict_free(&type->values_); - xbt_free(type->name_); - xbt_free(type->id_); - xbt_free(type->color_); - xbt_dict_free(&type->children_); - delete type; -} - -void recursiveDestroyType(simgrid::instr::Type* type) -{ - XBT_DEBUG("recursiveDestroyType %s", type->name_); - xbt_dict_cursor_t cursor = nullptr; + xbt_dict_free(&values_); simgrid::instr::Type* child; char *child_name; - xbt_dict_foreach (type->children_, cursor, child_name, child) { - recursiveDestroyType (child); + xbt_dict_foreach (children_, cursor, child_name, child) { + delete child; } - PJ_type_free(type); + xbt_dict_free(&children_); + xbt_free(name_); + xbt_free(id_); + xbt_free(color_); } simgrid::instr::Type* PJ_type_get(const char* name, simgrid::instr::Type* father) diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index 37c4443432..2ecebc2b57 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -69,6 +69,7 @@ public: xbt_dict_t children_; xbt_dict_t values_; // valid for all types except variable and container Type(const char* typeNameBuff, const char* key, const char* color, e_entity_types kind, Type* father); + ~Type(); static Type* getOrNull(const char* name, Type* father); static Type* containerNew(const char* name, Type* father); static Type* eventNew(const char* name, Type* father); @@ -336,11 +337,8 @@ XBT_PUBLIC(void) PJ_container_remove_from_parent (container_t container); XBT_PRIVATE void PJ_type_release (); XBT_PUBLIC(simgrid::instr::Type*) PJ_type_get_root(); XBT_PUBLIC(simgrid::instr::Type*) PJ_type_get(const char* name, simgrid::instr::Type* father); -XBT_PRIVATE XBT_PRIVATE void PJ_type_free(simgrid::instr::Type* type); /* instr_config.c */ -XBT_PRIVATE void recursiveDestroyType(simgrid::instr::Type* type); - XBT_PRIVATE void TRACE_TI_start(); XBT_PRIVATE void TRACE_TI_end(); -- 2.20.1