]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r17308@aud-055: nickm | 2008-07-23 15:57:41 +0200
authorNick Mathewson <nickm@torproject.org>
Wed, 23 Jul 2008 14:07:26 +0000 (14:07 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 23 Jul 2008 14:07:26 +0000 (14:07 +0000)
 In connection_edge_destroy, send a stream status control event when we have an AP connection.  Previously, we would send an event when the connection was AP and non-AP at the same time.  This didn't work so well.  Patch from Anonymous Remailer (Austria).  Backport candidate.

svn:r16143

ChangeLog
src/or/connection_edge.c

index 418c540bb716c9a5fdf03baae09e29b6bc3c20e3..7240a83e394bb2f729455d9344f3393ff7e089dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -39,6 +39,11 @@ Changes in version 0.2.1.3-alpha - 2008-07-xx
       don't reschedule publication of the next descriptor. Fixes bug 763.
       Bugfix on 0.0.9.3.
 
+  o Minor bugfixes (controller):
+    - When closing an application-side connection because its circuit
+      is getting torn down, generate the stream event correctly.
+      Bugfix on 0.1.2.x.  Anonymous patch.
+
   o Removed features
     - Remove all backward-compatibility code to support servers running
       versions of Tor so old as to no longer work at all on the Tor network.
index 96a9bb6c8937a9064e6584326c61042012e276f8..aee22eb0cb74a75af0b67e1481a0214b46af676c 100644 (file)
@@ -160,14 +160,14 @@ connection_edge_destroy(uint16_t circ_id, edge_connection_t *conn)
              "CircID %d: At an edge. Marking connection for close.", circ_id);
     if (conn->_base.type == CONN_TYPE_AP) {
       connection_mark_unattached_ap(conn, END_STREAM_REASON_DESTROY);
+      control_event_stream_status(conn, STREAM_EVENT_CLOSED,
+                                  END_STREAM_REASON_DESTROY);
+      conn->end_reason |= END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED;
     } else {
       /* closing the circuit, nothing to send an END to */
       conn->_base.edge_has_sent_end = 1;
       conn->end_reason = END_STREAM_REASON_DESTROY;
       conn->end_reason |= END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED;
-      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;
     }