summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-12-16 19:16:07 -0500
committerNick Mathewson <nickm@torproject.org>2015-12-16 19:16:07 -0500
commite6be486aea1a102d73c4432340c533eea80740e1 (patch)
tree5fe3d21c6600efb9f1336e05c468d6c0e50c7a10 /src/or
parent24fcb6adbb3896395edda38d6ecccb6ad53bddbd (diff)
downloadtor-e6be486aea1a102d73c4432340c533eea80740e1.tar.gz
tor-e6be486aea1a102d73c4432340c533eea80740e1.zip
More emergency-check code for un-removed pending entry conns
This might also be what #17752 needs.
Diffstat (limited to 'src/or')
-rw-r--r--src/or/connection.c7
-rw-r--r--src/or/connection_edge.c21
-rw-r--r--src/or/connection_edge.h4
3 files changed, 27 insertions, 5 deletions
diff --git a/src/or/connection.c b/src/or/connection.c
index d6e5fcb277..b4cd4cdddb 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 d4ef064164..8a3beb3ce9 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 6da51eb0c6..2aba801461 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