[tor-commits] [tor/master] Disable recording new broken conns when we have bootstrapped

nickm at torproject.org nickm at torproject.org
Mon Jul 11 20:16:17 UTC 2011


commit 2a594fcde94ada2ef38d33d306b7df189a5e495c
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Jul 11 16:10:24 2011 -0400

    Disable recording new broken conns when we have bootstrapped
    
    Rationale: right now there seems to be no way for our bootstrap
    status to dip under 100% once it has reached 100%.  Thus, recording
    broken connections after that point is useless, and wastes memory.
    
    If at some point in the future we allow our bootstrap level to go
    backwards, then we should change this rule so that we disable
    recording broken connection states _as long as_ the bootstrap status
    is 100%.
---
 src/or/circuitbuild.c  |    2 +-
 src/or/connection.c    |    2 +-
 src/or/connection_or.c |   17 ++++++++++++++---
 src/or/connection_or.h |    2 +-
 4 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 6a411d1..0e1dd52 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -2117,7 +2117,7 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
             "Looks like client functionality is working.");
         control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0);
         control_event_client_status(LOG_NOTICE, "CIRCUIT_ESTABLISHED");
-        clear_broken_connection_map();
+        clear_broken_connection_map(1);
         if (server_mode(options) && !check_whether_orport_reachable()) {
           inform_testing_reachability();
           consider_testing_reachability(1, 1);
diff --git a/src/or/connection.c b/src/or/connection.c
index b0e0f84..d82a66e 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -555,7 +555,7 @@ connection_free_all(void)
   connection_or_clear_identity_map();
 
   /* Clear out our list of broken connections */
-  clear_broken_connection_map();
+  clear_broken_connection_map(0);
 
   SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
 
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index e755c7e..94f8e22 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -158,12 +158,18 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
  */
 static strmap_t *broken_connection_counts;
 
+/** If true, do not record information in <b>broken_connection_counts</b>. */
+static int disable_broken_connection_counts = 0;
+
 /** Record that an OR connection failed in <b>state</b>. */
 static void
 note_broken_connection(const char *state)
 {
   void *ptr;
   intptr_t val;
+  if (disable_broken_connection_counts)
+    return;
+
   if (!broken_connection_counts)
     broken_connection_counts = strmap_new();
 
@@ -174,13 +180,16 @@ note_broken_connection(const char *state)
   strmap_set(broken_connection_counts, state, ptr);
 }
 
-/** Forget all recorded states for failed connections. */
+/** Forget all recorded states for failed connections.  If
+ * <b>stop_recording</b> is true, don't record any more. */
 void
-clear_broken_connection_map(void)
+clear_broken_connection_map(int stop_recording)
 {
   if (broken_connection_counts)
     strmap_free(broken_connection_counts, NULL);
   broken_connection_counts = NULL;
+  if (stop_recording)
+    disable_broken_connection_counts = 1;
 }
 
 /** Write a detailed description the state of <b>orconn</b> into the
@@ -209,6 +218,8 @@ static void
 connection_or_note_state_when_broken(or_connection_t *orconn)
 {
   char buf[256];
+  if (disable_broken_connection_counts)
+    return;
   connection_or_get_state_description(orconn, buf, sizeof(buf));
   log_info(LD_HANDSHAKE,"Connection died in state '%s'", buf);
   note_broken_connection(buf);
@@ -240,7 +251,7 @@ connection_or_report_broken_states(int severity, int domain)
   int total = 0;
   smartlist_t *items;
 
-  if (!broken_connection_counts)
+  if (!broken_connection_counts || disable_broken_connection_counts)
     return;
 
   items = smartlist_create();
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index abcfe83..072edbd 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -14,7 +14,7 @@
 
 void connection_or_remove_from_identity_map(or_connection_t *conn);
 void connection_or_clear_identity_map(void);
-void clear_broken_connection_map(void);
+void clear_broken_connection_map(int disable);
 or_connection_t *connection_or_get_for_extend(const char *digest,
                                               const tor_addr_t *target_addr,
                                               const char **msg_out,





More information about the tor-commits mailing list