Explorar o código

bugfix: if the exit stream is pending on the resolve, and a destroy
arrives, then the stream wasn't getting removed from the pending list.

this may have been the lucky-bug.
this commit may also not actually fix the bug. it's darn hard to
reproduce.


svn:r1122

Roger Dingledine %!s(int64=21) %!d(string=hai) anos
pai
achega
1b25794a56
Modificáronse 1 ficheiros con 4 adicións e 0 borrados
  1. 4 0
      src/or/connection.c

+ 4 - 0
src/or/connection.c

@@ -682,6 +682,10 @@ int connection_send_destroy(uint16_t circ_id, connection_t *conn) {
   if(!connection_speaks_cells(conn)) {
      log_fn(LOG_INFO,"CircID %d: At an edge. Marking connection for close.",
             circ_id);
+     if(conn->type == CONN_TYPE_EXIT && conn->state == EXIT_CONN_STATE_RESOLVING) {
+       log_fn(LOG_INFO,"...and informing resolver we don't want the answer anymore.");
+       dns_cancel_pending_resolve(conn->address, conn);
+     }
      if(connection_edge_end(conn, END_STREAM_REASON_DESTROY, conn->cpath_layer) < 0)
        log_fn(LOG_WARN,"1: I called connection_edge_end redundantly.");
      /* if they already sent a destroy, they know. XXX can just close? */