mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Merge branch 'bug5263_023'
This commit is contained in:
commit
54ef039ba5
5
changes/bug5263
Normal file
5
changes/bug5263
Normal file
@ -0,0 +1,5 @@
|
||||
o Minor bugfixes:
|
||||
- Disable writing on marked-for-close connections when they are
|
||||
blocked on bandwidth, to prevent busy-looping in Libevent. Fixes
|
||||
bug 5263; bugfix on 0.0.2pre13, where we first added a special
|
||||
case for flushing marked connections.
|
@ -848,6 +848,30 @@ conn_close_if_marked(int i)
|
||||
"Holding conn (fd %d) open for more flushing.",
|
||||
(int)conn->s));
|
||||
conn->timestamp_lastwritten = now; /* reset so we can flush more */
|
||||
} else if (sz == 0) { /* retval is also 0 */
|
||||
/* Connection must flush before closing, but it's being rate-limited.
|
||||
Let's remove from Libevent, and mark it as blocked on bandwidth so it
|
||||
will be re-added on next token bucket refill. Prevents busy Libevent
|
||||
loops where we keep ending up here and returning 0 until we are no
|
||||
longer blocked on bandwidth. */
|
||||
if (connection_is_writing(conn)) {
|
||||
conn->write_blocked_on_bw = 1;
|
||||
connection_stop_writing(conn);
|
||||
}
|
||||
if (connection_is_reading(conn)) {
|
||||
#define MARKED_READING_RATE 180
|
||||
static ratelim_t marked_read_lim = RATELIM_INIT(MARKED_READING_RATE);
|
||||
char *m;
|
||||
if ((m = rate_limit_log(&marked_read_lim, now))) {
|
||||
log_warn(LD_BUG, "Marked connection (fd %d, type %s, state %s) "
|
||||
"is still reading; that shouldn't happen.%s",
|
||||
(int)conn->s, conn_type_to_string(conn->type),
|
||||
conn_state_to_string(conn->type, conn->state), m);
|
||||
tor_free(m);
|
||||
}
|
||||
conn->read_blocked_on_bw = 1;
|
||||
connection_stop_reading(conn);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user