From b25ddfe7a95085c6c52b57cfd7debccb3a8d0638 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Thu, 2 Feb 2017 15:26:42 +0100 Subject: [PATCH 1/1] plug a huge memleak that I created while optimizing for speed --- include/xbt/dynar.h | 1 + sonar-project.properties | 2 +- src/smpi/smpi_base.cpp | 1 + src/xbt/dynar.cpp | 8 ++++++++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/xbt/dynar.h b/include/xbt/dynar.h index d9796b51f9..9be1816ee0 100644 --- a/include/xbt/dynar.h +++ b/include/xbt/dynar.h @@ -70,6 +70,7 @@ XBT_PUBLIC(void) xbt_dynar_init(xbt_dynar_t dynar, const unsigned long elmsize, XBT_PUBLIC(void) xbt_dynar_free(xbt_dynar_t * dynar); XBT_PUBLIC(void) xbt_dynar_free_voidp(void *dynar); XBT_PUBLIC(void) xbt_dynar_free_container(xbt_dynar_t * dynar); +XBT_PUBLIC(void) xbt_dynar_free_data(xbt_dynar_t dynar); XBT_PUBLIC(void) xbt_dynar_shrink(xbt_dynar_t dynar, int empty_slots); XBT_PUBLIC(void) xbt_dynar_dump(xbt_dynar_t dynar); diff --git a/sonar-project.properties b/sonar-project.properties index 8e42539aba..3e5b3d8edf 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -3,7 +3,7 @@ sonar.projectKey=simgrid sonar.projectName=SimGrid -sonar.projectVersion=3.13.91 +sonar.projectVersion=3.15 sonar.links.homepage=http://simgrid.org sonar.links.issue=https://github.com/simgrid/simgrid/issues diff --git a/src/smpi/smpi_base.cpp b/src/smpi/smpi_base.cpp index 9bae432bef..ece561ebd8 100644 --- a/src/smpi/smpi_base.cpp +++ b/src/smpi/smpi_base.cpp @@ -877,6 +877,7 @@ int smpi_mpi_waitany(int count, MPI_Request requests[], MPI_Status * status) requests[index] = MPI_REQUEST_NULL; } } + xbt_dynar_free_data(&comms); xbt_free(map); } diff --git a/src/xbt/dynar.cpp b/src/xbt/dynar.cpp index 8281480d73..e5c4072d69 100644 --- a/src/xbt/dynar.cpp +++ b/src/xbt/dynar.cpp @@ -114,6 +114,14 @@ extern "C" void xbt_dynar_init(xbt_dynar_t dynar, const unsigned long elmsize, v dynar->free_f = free_f; } +/** @brief Destroy a dynar that was created with xbt_dynar_init */ +extern "C" void xbt_dynar_free_data(xbt_dynar_t dynar) +{ + xbt_dynar_reset(dynar); + if (dynar) + free(dynar->data); +} + /** @brief Destructor of the structure not touching to the content * * \param dynar poor victim -- 2.20.1