commit bb9b4c37f8e7f5cf78918f382e90d8b11ff42551 Author: Nick Mathewson nickm@torproject.org Date: Fri Apr 18 12:28:30 2014 -0400
Supply better and less frequent warnings on circID exhaustion
Fixes the surface behavior of #11553 --- changes/bug11553 | 5 +++++ src/or/channel.h | 2 ++ src/or/circuitbuild.c | 9 ++++++++- 3 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/changes/bug11553 b/changes/bug11553 new file mode 100644 index 0000000..1540f46 --- /dev/null +++ b/changes/bug11553 @@ -0,0 +1,5 @@ + o Minor features: + - When we run out of usable circuit IDs on a channel, log only one + warning for the whole channel, and include a description of + how many circuits there were on the channel. Fix for part of ticket + #11553. diff --git a/src/or/channel.h b/src/or/channel.h index 2dca817..29ba40e 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -148,6 +148,8 @@ struct channel_s { ENUM_BF(circ_id_type_t) circ_id_type:2; /** DOCDOC*/ unsigned wide_circ_ids:1; + /** Have we logged a warning about circID exhaustion on this channel? */ + unsigned warned_circ_ids_exhausted:1; /* * Which circ_id do we try to use next on this connection? This is * always in the range 0..1<<15-1. diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index e47a278..2b4d3c3 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -127,7 +127,14 @@ get_unique_circ_id_by_chan(channel_t *chan) /* Make sure we don't loop forever if all circ_id's are used. This * matters because it's an external DoS opportunity. */ - log_warn(LD_CIRC,"No unused circ IDs. Failing."); + if (! chan->warned_circ_ids_exhausted) { + chan->warned_circ_ids_exhausted = 1; + log_warn(LD_CIRC,"No unused circIDs found on channel %s wide " + "circID support, with %u inbound and %u outbound circuits. " + "Failing a circuit.", + chan->wide_circ_ids ? "with" : "without", + chan->num_p_circuits, chan->num_n_circuits); + } return 0; } test_circ_id |= high_bit;
tor-commits@lists.torproject.org