[tor-commits] [tor/release-0.2.4] Fix memory leak when sending configuration-changed event

arma at torproject.org arma at torproject.org
Sat May 25 03:58:40 UTC 2013


commit 0a9c17a61ad7193a051c53ea2a0cb91e012f014e
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Apr 17 11:34:15 2013 -0400

    Fix memory leak when sending configuration-changed event
    
    Fix for bug #8718; bugfix on 0.2.3.3-alpha.
---
 changes/bug8716  |    3 +++
 src/or/config.c  |    3 ++-
 src/or/control.c |    2 +-
 src/or/control.h |    2 +-
 4 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/changes/bug8716 b/changes/bug8716
new file mode 100644
index 0000000..74c74f8
--- /dev/null
+++ b/changes/bug8716
@@ -0,0 +1,3 @@
+  o Minor bugfixes (memory leak):
+    - Fix a memory leak that would occur whenever a configuration
+      option changed. Fixes bug #8718; bugfix on 0.2.3.3-alpha.
diff --git a/src/or/config.c b/src/or/config.c
index 16eadf9..236955b 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -785,12 +785,13 @@ set_options(or_options_t *new_val, char **msg)
             tor_free(line);
           }
         } else {
-          smartlist_add(elements, (char*)options_format.vars[i].name);
+          smartlist_add(elements, tor_strdup(options_format.vars[i].name));
           smartlist_add(elements, NULL);
         }
       }
     }
     control_event_conf_changed(elements);
+    SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
     smartlist_free(elements);
   }
 
diff --git a/src/or/control.c b/src/or/control.c
index fc7bae2..417f6c6 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -4347,7 +4347,7 @@ control_event_guard(const char *nickname, const char *digest,
  * a smartlist_t containing (key, value, ...) pairs in sequence.
  * <b>value</b> can be NULL. */
 int
-control_event_conf_changed(smartlist_t *elements)
+control_event_conf_changed(const smartlist_t *elements)
 {
   int i;
   char *result;
diff --git a/src/or/control.h b/src/or/control.h
index f301ce9..943d67e 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -71,7 +71,7 @@ int control_event_server_status(int severity, const char *format, ...)
   CHECK_PRINTF(2,3);
 int control_event_guard(const char *nickname, const char *digest,
                         const char *status);
-int control_event_conf_changed(smartlist_t *elements);
+int control_event_conf_changed(const smartlist_t *elements);
 int control_event_buildtimeout_set(const circuit_build_times_t *cbt,
                                    buildtimeout_set_event_t type);
 int control_event_signal(uintptr_t signal);





More information about the tor-commits mailing list