diff --git a/src/or/connection.c b/src/or/connection.c index 4f076c3d64..2669f074d2 100644 --- a/src/or/connection.c +++ b/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 { diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 49d91f855a..53e7b68c81 100644 --- a/src/or/connection_edge.c +++ b/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 }