[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r9928: Fix second part of bug 411 (which was actually a separate bu (in tor/trunk: . src/or)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r9928: Fix second part of bug 411 (which was actually a separate bu (in tor/trunk: . src/or)
- From: nickm@xxxxxxxx
- Date: Mon,  9 Apr 2007 16:09:26 -0400 (EDT)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Mon, 09 Apr 2007 16:09:34 -0400
- Reply-to: or-talk@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: nickm
Date: 2007-04-09 16:09:26 -0400 (Mon, 09 Apr 2007)
New Revision: 9928
Modified:
   tor/trunk/
   tor/trunk/src/or/circuitlist.c
Log:
 r12317@catbus:  nickm | 2007-04-09 15:50:51 -0400
 Fix second part of bug 411 (which was actually a separate bug): it isnt safe to clear a cell queue while the circuit is active.
Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r12317] on 8246c3cf-6607-4228-993b-4d95d33730f1
Modified: tor/trunk/src/or/circuitlist.c
===================================================================
--- tor/trunk/src/or/circuitlist.c	2007-04-09 13:50:21 UTC (rev 9927)
+++ tor/trunk/src/or/circuitlist.c	2007-04-09 20:09:26 UTC (rev 9928)
@@ -398,19 +398,23 @@
       other->rend_splice = NULL;
     }
 
-    cell_queue_clear(ô->p_conn_cells);
-
     tor_free(circ->onionskin);
 
     /* remove from map. */
     circuit_set_p_circid_orconn(ocirc, 0, NULL);
+
+    /* Clear cell queue _after_ removing it from the map.  Otherwise our
+     * "active" checks will be violated. */
+    cell_queue_clear(ô->p_conn_cells);
   }
 
-  cell_queue_clear(&circ->n_conn_cells);
-
   /* Remove from map. */
   circuit_set_n_circid_orconn(circ, 0, NULL);
 
+  /* Clear cell queue _after_ removing it from the map.  Otherwise our
+   * "active" checks will be violated. */
+  cell_queue_clear(&circ->n_conn_cells);
+
   memset(circ, 0xAA, sizeof(circuit_t)); /* poison memory */
   tor_free(mem);
 }