backport candidate:

Fix a minor memory leak when we fail to find enough suitable
servers to choose a circuit. Bugfix on 0.1.2.x.


svn:r11247
This commit is contained in:
Roger Dingledine 2007-08-22 03:03:24 +00:00
parent a80dd635b3
commit 79066b4851
2 changed files with 4 additions and 2 deletions

View File

@ -24,6 +24,8 @@ Changes in version 0.2.0.6-alpha - 2007-??-??
- Stop putting the authentication cookie in a file called "0" - Stop putting the authentication cookie in a file called "0"
in your working directory if you don't specify anything for the in your working directory if you don't specify anything for the
new CookieAuthFile option. Reported by Matt Edman. new CookieAuthFile option. Reported by Matt Edman.
- Fix a minor memory leak when we fail to find enough suitable
servers to choose a circuit. Bugfix on 0.1.2.x.
o Minor features (misc): o Minor features (misc):
- Optionally (if built with -DEXPORTMALLINFO) export the output - Optionally (if built with -DEXPORTMALLINFO) export the output

View File

@ -1072,7 +1072,6 @@ circuit_get_unhandled_ports(time_t now)
int i; int i;
for (i = 0; i < smartlist_len(source); ++i) { for (i = 0; i < smartlist_len(source); ++i) {
/*XXXX020 some of these are leaked somewhere.. fix that. */
tmp = tor_malloc(sizeof(uint16_t)); tmp = tor_malloc(sizeof(uint16_t));
memcpy(tmp, smartlist_get(source, i), sizeof(uint16_t)); memcpy(tmp, smartlist_get(source, i), sizeof(uint16_t));
smartlist_add(dest, tmp); smartlist_add(dest, tmp);
@ -1272,7 +1271,7 @@ choose_good_exit_server_general(routerlist_t *dir, int need_uptime,
* at least one predicted exit port. */ * at least one predicted exit port. */
int try; int try;
smartlist_t *needed_ports = circuit_get_unhandled_ports(time(NULL)); smartlist_t *needed_ports;
if (best_support == -1) { if (best_support == -1) {
if (need_uptime || need_capacity) { if (need_uptime || need_capacity) {
@ -1290,6 +1289,7 @@ choose_good_exit_server_general(routerlist_t *dir, int need_uptime,
log_notice(LD_CIRC, "All routers are down or won't exit -- choosing a " log_notice(LD_CIRC, "All routers are down or won't exit -- choosing a "
"doomed exit at random."); "doomed exit at random.");
} }
needed_ports = circuit_get_unhandled_ports(time(NULL));
for (try = 0; try < 2; try++) { for (try = 0; try < 2; try++) {
/* try once to pick only from routers that satisfy a needed port, /* try once to pick only from routers that satisfy a needed port,
* then if there are none, pick from any that support exiting. */ * then if there are none, pick from any that support exiting. */