Browse Source

Merge remote-tracking branch 'public/bug8716_023' into maint-0.2.4

Nick Mathewson 11 years ago
parent
commit
e35ca13528
4 changed files with 7 additions and 3 deletions
  1. 3 0
      changes/bug8716
  2. 2 1
      src/or/config.c
  3. 1 1
      src/or/control.c
  4. 1 1
      src/or/control.h

+ 3 - 0
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.

+ 2 - 1
src/or/config.c

@@ -620,12 +620,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);
   }
 

+ 1 - 1
src/or/control.c

@@ -4393,7 +4393,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;

+ 1 - 1
src/or/control.h

@@ -72,7 +72,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);