Browse Source

fix the other half of the pipe race

svn:r3111
Roger Dingledine 21 years ago
parent
commit
012255fe60
2 changed files with 4 additions and 2 deletions
  1. 2 0
      src/or/connection.c
  2. 2 2
      src/or/connection_edge.c

+ 2 - 0
src/or/connection.c

@@ -236,6 +236,8 @@ void connection_about_to_close_connection(connection_t *conn)
       if (conn->socks_request->has_finished == 0) {
         log_fn(LOG_INFO,"Cleaning up AP -- sending socks reject.");
         conn->hold_open_until_flushed = 1;
+        /* XXX this socks_reply never gets sent, since conn
+         * gets removed right after this function finishes. */
         connection_ap_handshake_socks_reply(conn, NULL, 0, -1);
         conn->socks_request->has_finished = 1;
       } else {

+ 2 - 2
src/or/connection_edge.c

@@ -45,9 +45,9 @@ int connection_edge_reached_eof(connection_t *conn) {
     /* only mark it if not already marked. it's possible to
      * get the 'end' right around when the client hangs up on us. */
     connection_mark_for_close(conn);
+    conn->hold_open_until_flushed = 1; /* just because we shouldn't read
+                                          doesn't mean we shouldn't write */
   }
-  conn->hold_open_until_flushed = 1; /* just because we shouldn't read
-                                        doesn't mean we shouldn't write */
   return 0;
 #endif
 }