Browse Source

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

Roger Dingledine 18 years ago
parent
commit
79066b4851
2 changed files with 4 additions and 2 deletions
  1. 2 0
      ChangeLog
  2. 2 2
      src/or/circuitbuild.c

+ 2 - 0
ChangeLog

@@ -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

+ 2 - 2
src/or/circuitbuild.c

@@ -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. */