aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-02-07 18:25:04 +0000
committerNick Mathewson <nickm@torproject.org>2007-02-07 18:25:04 +0000
commita24b9e6a6604e1c092ec43f6ddc71016ac4f8bdb (patch)
treee88548588212c29267fbe2b5a3ff01793a2d360d
parentae44338090064c80253272e197df2584a34e3ad0 (diff)
downloadtor-a24b9e6a6604e1c092ec43f6ddc71016ac4f8bdb.tar
tor-a24b9e6a6604e1c092ec43f6ddc71016ac4f8bdb.tar.gz
r11694@catbus: nickm | 2007-02-07 13:25:01 -0500
Fix patch for 9510: never call control_event_stream_status on an exit connection. Should fix assert() noticed by xiando. svn:r9514
-rw-r--r--src/or/circuitlist.c4
-rw-r--r--src/or/connection_edge.c5
2 files changed, 4 insertions, 5 deletions
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 93784a485..f5651d097 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -948,14 +948,12 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
conn = or_circ->resolving_streams;
or_circ->resolving_streams = conn->next_stream;
if (!conn->_base.marked_for_close) {
- /* The other side will see a DESTROY, and infer that the connections
+ /* The client will see a DESTROY, and infer that the connections
* are closing because the circuit is getting torn down. No need
* to send an end cell. */
conn->_base.edge_has_sent_end = 1;
conn->end_reason = END_STREAM_REASON_DESTROY;
conn->end_reason |= END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED;
- control_event_stream_status(conn, STREAM_EVENT_CLOSED,
- END_STREAM_REASON_DESTROY);
connection_mark_for_close(TO_CONN(conn));
}
conn->on_circuit = NULL;
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 53639dfdf..b40425c3f 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -159,8 +159,9 @@ connection_edge_destroy(uint16_t circ_id, edge_connection_t *conn)
conn->_base.edge_has_sent_end = 1;
conn->end_reason = END_STREAM_REASON_DESTROY;
conn->end_reason |= END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED;
- control_event_stream_status(conn, STREAM_EVENT_CLOSED,
- END_STREAM_REASON_DESTROY);
+ if (conn->_base.type == CONN_TYPE_AP)
+ control_event_stream_status(conn, STREAM_EVENT_CLOSED,
+ END_STREAM_REASON_DESTROY);
connection_mark_for_close(TO_CONN(conn));
conn->_base.hold_open_until_flushed = 1;
}