From d2123388adc8af36a19446a8eee7ee64eeef90ec Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 5 Dec 2005 19:45:54 +0000 Subject: Better fix for last bug: avoids trying to double-mark circuits. svn:r5511 --- src/or/circuitlist.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/or/circuitlist.c') diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index c9db1e9da2..6ab5a10a52 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -458,20 +458,24 @@ circuit_get_by_edge_conn(connection_t *conn) return circ; } -/** Return a new list of all circuits that have conn as n_conn or - * p_conn, including those marked for close. +/** For each circuits that have conn as n_conn or p_conn, unlink the + * circuit from the orconn,circid map, and mark it for close if it hasn't + * been marked already. */ -smartlist_t * -circuit_get_all_on_orconn(connection_t *conn) +void +circuit_unlink_all_from_or_conn(connection_t *conn) { - smartlist_t *res = smartlist_create(); circuit_t *circ; - - for (circ=global_circuitlist;circ;circ = circ->next) { - if (circ->p_conn == conn || circ->n_conn == conn) - smartlist_add(res, circ); + for (circ = global_circuitlist; circ; circ = circ->next) { + if (circ->n_conn == conn || circ->p_conn == conn) { + if (circ->n_conn == conn) + circuit_set_circid_orconn(circ, 0, NULL, N_CONN_CHANGED); + if (circ->p_conn == conn) + circuit_set_circid_orconn(circ, 0, NULL, P_CONN_CHANGED); + if (!circ->marked_for_close) + circuit_mark_for_close(circ); + } } - return res; } /** Return a circ such that: -- cgit v1.2.3-54-g00ecf