diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-02-07 18:25:04 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-02-07 18:25:04 +0000 |
commit | a24b9e6a6604e1c092ec43f6ddc71016ac4f8bdb (patch) | |
tree | e88548588212c29267fbe2b5a3ff01793a2d360d | |
parent | ae44338090064c80253272e197df2584a34e3ad0 (diff) | |
download | tor-a24b9e6a6604e1c092ec43f6ddc71016ac4f8bdb.tar.gz tor-a24b9e6a6604e1c092ec43f6ddc71016ac4f8bdb.zip |
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.c | 4 | ||||
-rw-r--r-- | src/or/connection_edge.c | 5 |
2 files changed, 4 insertions, 5 deletions
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 93784a485d..f5651d0970 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 53639dfdf9..b40425c3f8 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; } |