mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
fix a rare race condition: when we send a cell and then
mark an OR connection expired, we might close it before finishing a flush if the other side isn't reading. svn:r1240
This commit is contained in:
parent
516ef41ac1
commit
10cee8b7f7
@ -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. */
|
/* 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).",
|
log_fn(LOG_INFO,"Expiring connection to %d (%s:%d).",
|
||||||
i,conn->address, conn->port);
|
i,conn->address, conn->port);
|
||||||
connection_mark_for_close(conn,0); /* Suppress end ??? */
|
/* flush anything waiting, e.g. a destroy for a just-expired circ */
|
||||||
/* XXX there's no concept of 'suppressing end' here, because it's an OR
|
conn->hold_open_until_flushed = 1;
|
||||||
* connection, and there's no such thing as an end cell for an OR
|
connection_mark_for_close(conn,0);
|
||||||
* connection. -RD */
|
|
||||||
} else {
|
} else {
|
||||||
/* either a full router, or we've got a circuit. send a padding cell. */
|
/* either a full router, or we've got a circuit. send a padding cell. */
|
||||||
log_fn(LOG_DEBUG,"Sending keepalive to (%s:%d)",
|
log_fn(LOG_DEBUG,"Sending keepalive to (%s:%d)",
|
||||||
|
Loading…
Reference in New Issue
Block a user