diff --git a/changes/bug8716 b/changes/bug8716 new file mode 100644 index 000000000..74c74f82a --- /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 16eadf917..236955b2b 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 fc7bae23e..417f6c6db 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. * value 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 f301ce91b..943d67eea 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);