More emergency-check code for un-removed pending entry conns

This might also be what #17752 needs.
This commit is contained in:
Nick Mathewson 2015-12-16 19:16:07 -05:00
parent 24fcb6adbb
commit e6be486aea
3 changed files with 27 additions and 5 deletions

View file

@ -678,6 +678,13 @@ connection_free,(connection_t *conn))
if (conn->type == CONN_TYPE_CONTROL) { if (conn->type == CONN_TYPE_CONTROL) {
connection_control_closed(TO_CONTROL_CONN(conn)); 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_unregister_events(conn);
connection_free_(conn); connection_free_(conn);
} }

View file

@ -566,11 +566,9 @@ connection_ap_about_to_close(entry_connection_t *entry_conn)
#if 1 #if 1
/* Check to make sure that this isn't in pending_entry_connections if it /* Check to make sure that this isn't in pending_entry_connections if it
* didn't actually belong there. */ * didn't actually belong there. */
if (TO_CONN(edge_conn)->type == CONN_TYPE_AP && if (TO_CONN(edge_conn)->type == CONN_TYPE_AP) {
smartlist_contains(pending_entry_connections, entry_conn)) { connection_ap_warn_and_unmark_if_pending_circ(entry_conn,
log_warn(LD_BUG, "What was %p doing in pending_entry_connections???", "about_to_close");
entry_conn);
smartlist_remove(pending_entry_connections, entry_conn);
} }
#endif #endif
@ -903,6 +901,19 @@ connection_ap_mark_as_non_pending_circuit(entry_connection_t *entry_conn)
smartlist_remove(pending_entry_connections, 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 /** Tell any AP streams that are waiting for a one-hop tunnel to
* <b>failed_digest</b> that they are going to fail. */ * <b>failed_digest</b> that they are going to fail. */
/* XXX024 We should get rid of this function, and instead attach /* XXX024 We should get rid of this function, and instead attach

View file

@ -115,6 +115,10 @@ streamid_t get_unique_stream_id_by_circ(origin_circuit_t *circ);
void connection_edge_free_all(void); 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 /** @name Begin-cell flags
* *
* These flags are used in RELAY_BEGIN cells to change the default behavior * These flags are used in RELAY_BEGIN cells to change the default behavior