Browse Source

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

Nick Mathewson 17 years ago
parent
commit
a24b9e6a66
2 changed files with 4 additions and 5 deletions
  1. 1 3
      src/or/circuitlist.c
  2. 3 2
      src/or/connection_edge.c

+ 1 - 3
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;

+ 3 - 2
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;
     }