瀏覽代碼

Fix memory leak when sending configuration-changed event

Fix for bug #8718; bugfix on 0.2.3.3-alpha.
Nick Mathewson 11 年之前
父節點
當前提交
0a9c17a61a
共有 4 個文件被更改,包括 7 次插入3 次删除
  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

@@ -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);
   }
 

+ 1 - 1
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;

+ 1 - 1
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);