|
@@ -398,19 +398,23 @@ circuit_free(circuit_t *circ)
|
|
|
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);
|
|
|
- }
|
|
|
|
|
|
- cell_queue_clear(&circ->n_conn_cells);
|
|
|
+ /* Clear cell queue _after_ removing it from the map. Otherwise our
|
|
|
+ * "active" checks will be violated. */
|
|
|
+ cell_queue_clear(ô->p_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);
|
|
|
}
|