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) {
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);
}

View File

@ -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

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_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