Browse Source

Fix a small memory leak whenever we decide against using a
newly picked entry guard. Reported by Mike Perry.


svn:r12506

Roger Dingledine 16 years ago
parent
commit
06a1e4124f
2 changed files with 6 additions and 3 deletions
  1. 3 0
      ChangeLog
  2. 3 3
      src/or/circuitbuild.c

+ 3 - 0
ChangeLog

@@ -6,12 +6,15 @@ Changes in version 0.2.0.12-alpha - 2007-11-??
   o Minor bugfixes:
     - When we're lacking a consensus, don't try to perform rendezvous
       operations.  (Bug spotted by Karsten)
+    - Fix a small memory leak whenever we decide against using a
+      newly picked entry guard. Reported by Mike Perry.
 
   o Minor features:
     - When we negotiate a v2 OR connection (not yet implemented), accept
       RELAY_EARLY cells and turn them into RELAY cells if we've negotiated
       a v1 connection.  Initial code for proposal 110.
 
+
 Changes in version 0.2.0.11-alpha - 2007-11-12
   o Security fixes:
     - Exit policies now reject connections that are addressed to a

+ 3 - 3
src/or/circuitbuild.c

@@ -2281,7 +2281,7 @@ entry_guard_register_connect_status(const char *digest, int succeeded,
                "Removing from the list. %d/%d entry guards usable/new.",
                entry->nickname, buf,
                num_live_entry_guards()-1, smartlist_len(entry_guards)-1);
-      tor_free(entry);
+      entry_guard_free(entry);
       smartlist_del_keeporder(entry_guards, idx);
       log_entry_guards(LOG_INFO);
       changed = 1;
@@ -2291,6 +2291,7 @@ entry_guard_register_connect_status(const char *digest, int succeeded,
       entry->unreachable_since = entry->last_attempted = now;
       control_event_guard(entry->nickname, entry->identity, "DOWN");
       changed = 1;
+      entry->can_retry = 0; /* We gave it an early chance; no good. */
     } else {
       char tbuf[ISO_TIME_LEN+1];
       format_iso_time(tbuf, entry->unreachable_since);
@@ -2298,9 +2299,8 @@ entry_guard_register_connect_status(const char *digest, int succeeded,
                 "'%s' (%s).  It has been unreachable since %s.",
                 entry->nickname, buf, tbuf);
       entry->last_attempted = now;
-    }
-    if (entry)
       entry->can_retry = 0; /* We gave it an early chance; no good. */
+    }
   }
 
   if (first_contact) {