]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
fix a rare race condition: when we send a cell and then
authorRoger Dingledine <arma@torproject.org>
Sat, 6 Mar 2004 06:05:00 +0000 (06:05 +0000)
committerRoger Dingledine <arma@torproject.org>
Sat, 6 Mar 2004 06:05:00 +0000 (06:05 +0000)
mark an OR connection expired, we might close it before
finishing a flush if the other side isn't reading.

svn:r1240

src/or/main.c

index 0a74d44747a664010158ec9b7d7f2c25263c1b56..10dc270352f6e5aa05ca9c20ee18d1b80bea5dc4 100644 (file)
@@ -304,10 +304,9 @@ static void run_connection_housekeeping(int i, time_t now) {
       /* we're an onion proxy, with no circuits; or our handshake has expired. kill it. */
       log_fn(LOG_INFO,"Expiring connection to %d (%s:%d).",
              i,conn->address, conn->port);
-      connection_mark_for_close(conn,0); /* Suppress end ??? */
-/* XXX there's no concept of 'suppressing end' here, because it's an OR
- * connection, and there's no such thing as an end cell for an OR
- * connection. -RD */
+      /* flush anything waiting, e.g. a destroy for a just-expired circ */
+      conn->hold_open_until_flushed = 1;
+      connection_mark_for_close(conn,0);
     } else {
       /* either a full router, or we've got a circuit. send a padding cell. */
       log_fn(LOG_DEBUG,"Sending keepalive to (%s:%d)",