[tor-commits] [tor/master] More emergency-check code for un-removed pending entry conns

nickm at torproject.org nickm at torproject.org
Thu Dec 17 00:16:48 UTC 2015


commit e6be486aea1a102d73c4432340c533eea80740e1
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Dec 16 19:16:07 2015 -0500

    More emergency-check code for un-removed pending entry conns
    
    This might also be what #17752 needs.
---
 src/or/connection.c      |    7 +++++++
 src/or/connection_edge.c |   21 ++++++++++++++++-----
 src/or/connection_edge.h |    4 ++++
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/or/connection.c b/src/or/connection.c
index d6e5fcb..b4cd4cd 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -678,6 +678,13 @@ connection_free,(connection_t *conn))
   if (conn->type == CONN_TYPE_CONTROL) {
     connection_control_closed(TO_CONTROL_CONN(conn));
   }
+#if 1
+  /* DEBUGGING */
+  if (conn->type == CONN_TYPE_AP) {
+    connection_ap_warn_and_unmark_if_pending_circ(TO_ENTRY_CONN(conn),
+                                                  "connection_free");
+  }
+#endif
   connection_unregister_events(conn);
   connection_free_(conn);
 }
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index d4ef064..8a3beb3 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -566,11 +566,9 @@ connection_ap_about_to_close(entry_connection_t *entry_conn)
 #if 1
   /* Check to make sure that this isn't in pending_entry_connections if it
    * didn't actually belong there. */
-  if (TO_CONN(edge_conn)->type == CONN_TYPE_AP &&
-      smartlist_contains(pending_entry_connections, entry_conn)) {
-    log_warn(LD_BUG, "What was %p doing in pending_entry_connections???",
-             entry_conn);
-    smartlist_remove(pending_entry_connections, entry_conn);
+  if (TO_CONN(edge_conn)->type == CONN_TYPE_AP) {
+    connection_ap_warn_and_unmark_if_pending_circ(entry_conn,
+                                                  "about_to_close");
   }
 #endif
 
@@ -903,6 +901,19 @@ connection_ap_mark_as_non_pending_circuit(entry_connection_t *entry_conn)
   smartlist_remove(pending_entry_connections, entry_conn);
 }
 
+/** DOCDOC */
+void
+connection_ap_warn_and_unmark_if_pending_circ(entry_connection_t *entry_conn,
+                                              const char *where)
+{
+  if (pending_entry_connections &&
+      smartlist_contains(pending_entry_connections, entry_conn)) {
+    log_warn(LD_BUG, "What was %p doing in pending_entry_connections in %s?",
+             entry_conn, where);
+    connection_ap_mark_as_non_pending_circuit(entry_conn);
+  }
+}
+
 /** Tell any AP streams that are waiting for a one-hop tunnel to
  * <b>failed_digest</b> that they are going to fail. */
 /* XXX024 We should get rid of this function, and instead attach
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index 6da51eb..2aba801 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -115,6 +115,10 @@ streamid_t get_unique_stream_id_by_circ(origin_circuit_t *circ);
 
 void connection_edge_free_all(void);
 
+void connection_ap_warn_and_unmark_if_pending_circ(
+                                             entry_connection_t *entry_conn,
+                                             const char *where);
+
 /** @name Begin-cell flags
  *
  * These flags are used in RELAY_BEGIN cells to change the default behavior



More information about the tor-commits mailing list