From: Nick Mathewson Date: Thu, 21 Jul 2011 00:27:36 +0000 (-0400) Subject: Add another precondition for isolation-clearing; fix 3620 X-Git-Tag: tor-0.2.3.3-alpha~73 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2c98104c7410e859e68a8e9e7b82f9af7595c921;p=thirdparty%2Ftor.git Add another precondition for isolation-clearing; fix 3620 --- diff --git a/src/or/circuituse.c b/src/or/circuituse.c index acfdc237e0..c48020115a 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -1041,8 +1041,15 @@ circuit_has_opened(origin_circuit_t *circ) * controller did it. Just let it slide. */ } - if (can_try_clearing_isolation && !tried_clearing_isolation && + if (/* The circuit may have become non-open if it was cannibalized.*/ + circ->_base.state == CIRCUIT_STATE_OPEN && + /* Only if the purpose is clearable, and only if we haven't tried + * to clear isolation yet, do we try. */ + can_try_clearing_isolation && !tried_clearing_isolation && + /* If !isolation_values_set, there is nothing to clear. */ circ->isolation_values_set && + /* It's not legal to clear a circuit's isolation info if it's ever had + * streams attached */ !circ->isolation_any_streams_attached) { /* If we have any isolation information set on this circuit, and * we didn't manage to attach any streams to it, then we can