Browse Source

don't mark_for_close again when the destroy arrives after the end cell

svn:r1211
Roger Dingledine 20 years ago
parent
commit
dbdd2eaa2a
1 changed files with 2 additions and 0 deletions
  1. 2 0
      src/or/connection_edge.c

+ 2 - 0
src/or/connection_edge.c

@@ -92,6 +92,8 @@ int connection_edge_process_inbuf(connection_t *conn) {
 int connection_edge_destroy(uint16_t circ_id, connection_t *conn) {
   assert(conn->type == CONN_TYPE_AP || conn->type == CONN_TYPE_EXIT);
 
+  if(conn->marked_for_close)
+    return 0; /* already marked; probably got an 'end' */
   log_fn(LOG_INFO,"CircID %d: At an edge. Marking connection for close.",
          circ_id);
   conn->has_sent_end = 1; /* we're closing the circuit, nothing to send to */