]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add another precondition for isolation-clearing; fix 3620
authorNick Mathewson <nickm@torproject.org>
Thu, 21 Jul 2011 00:27:36 +0000 (20:27 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 21 Jul 2011 00:27:36 +0000 (20:27 -0400)
src/or/circuituse.c

index acfdc237e0e06478b078b40e1d78574a04b9bc77..c48020115aeabe649840e9477f128d45fbf1d66b 100644 (file)
@@ -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