View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update | 
|---|---|---|---|---|---|
| 0008816 | GNUnet | transport service | public | 2024-05-07 06:06 | 2024-06-08 12:03 | 
| Reporter | ulfvonbelow | Assigned To | schanzen | ||
| Priority | normal | Severity | minor | Reproducibility | always | 
| Status | closed | Resolution | fixed | ||
| Platform | x86-64 | OS | Guix System | OS Version | a1d711c92e | 
| Product Version | Git master | ||||
| Fixed in Version | 0.21.2 | ||||
| Summary | 0008816: tcp communicator creates multiple statistics handles | ||||
| Description | init_socket can be called multiple times, and each time it unconditionally calls GNUNET_STATISTICS_create, even if stats is already set. All handles except the most recent will be leaked. | ||||
| Steps To Reproduce | 1. Build gnunet with --enable-sanitizer 2. Start the node with gnunet-arm -s 3. Stop the node after a bit with gnunet-arm -e 4. Observe reported memory leak wherever you've configured communicator-tcp to log to, provided that you have more than one address to bind to | ||||
| Additional Information | It's not clear to me why the statistics connection is being made in this particular place, but it's a pretty easy fix regardless. Patch attached. | ||||
| Tags | No tags attached. | ||||
| Attached Files |  0001-transport-only-create-one-statistics-handle-in-tcp-c.patch (1,021 bytes)   
 From 7ebb7fb93f674459bed6f1c299b67aba2b3447f8 Mon Sep 17 00:00:00 2001
From: ulfvonbelow <striness@tilde.club>
Date: Sun, 5 May 2024 12:28:45 -0500
Subject: [PATCH] transport: only create one statistics handle in tcp
 communicator.
---
 src/service/transport/gnunet-communicator-tcp.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/service/transport/gnunet-communicator-tcp.c b/src/service/transport/gnunet-communicator-tcp.c
index 1e0d47776..02f5fc9f9 100644
--- a/src/service/transport/gnunet-communicator-tcp.c
+++ b/src/service/transport/gnunet-communicator-tcp.c
@@ -3798,7 +3798,8 @@ init_socket (struct sockaddr *addr,
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Bound to `%s'\n",
               GNUNET_a2s ((const struct sockaddr *) &in_sto, sto_len));
-  stats = GNUNET_STATISTICS_create ("communicator-tcp", cfg);
+  if (NULL == stats)
+    stats = GNUNET_STATISTICS_create ("communicator-tcp", cfg);
 
   if (NULL == is)
     is = GNUNET_NT_scanner_init ();
-- 
2.41.0
 | ||||
| Date Modified | Username | Field | Change | 
|---|---|---|---|
| 2024-05-07 06:06 | ulfvonbelow | New Issue | |
| 2024-05-07 06:06 | ulfvonbelow | File Added: 0001-transport-only-create-one-statistics-handle-in-tcp-c.patch | |
| 2024-05-13 10:39 | schanzen | Assigned To | => schanzen | 
| 2024-05-13 10:39 | schanzen | Status | new => resolved | 
| 2024-05-13 10:39 | schanzen | Resolution | open => fixed | 
| 2024-05-13 10:39 | schanzen | Fixed in Version | => 0.21.2 | 
| 2024-05-13 10:39 | schanzen | Note Added: 0022385 | |
| 2024-06-08 12:03 | schanzen | Note Added: 0022542 | |
| 2024-06-08 12:03 | schanzen | Status | resolved => closed | 
