diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-08-31 12:52:11 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-08-31 12:52:11 -0400 |
commit | 285addbd943cbc9e96c0a268f4f45510270b4468 (patch) | |
tree | 0c9c8b606e9d13501fe29a96d7af97704e830123 /src | |
parent | ba9c1275c4b2325aed6a2fe2cc236794dab11052 (diff) | |
download | tor-285addbd943cbc9e96c0a268f4f45510270b4468.tar.gz tor-285addbd943cbc9e96c0a268f4f45510270b4468.zip |
Fix some issues in rate-limiting noticed by Sebastian
Diffstat (limited to 'src')
-rw-r--r-- | src/common/util.c | 4 | ||||
-rw-r--r-- | src/common/util.h | 1 | ||||
-rw-r--r-- | src/or/command.c | 4 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/common/util.c b/src/common/util.c index 3c735e9c7c..2781fa35d6 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1584,10 +1584,10 @@ ftime_definitely_before(time_t now, time_t when) /** If the rate-limiter <b>lim</b> is ready at <b>now</b>, return the number * of calls to rate_limit_is_ready (including this one!) since the last time * rate_limit_is_ready returned nonzero. Otherwise return 0. */ -int +static int rate_limit_is_ready(ratelim_t *lim, time_t now) { - if (lim->rate + lim->last_allowed >= now) { + if (lim->rate + lim->last_allowed <= now) { int res = lim->n_calls_since_last_time + 1; lim->last_allowed = now; lim->n_calls_since_last_time = 0; diff --git a/src/common/util.h b/src/common/util.h index 1e22bd5b1b..3a3a87378a 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -277,7 +277,6 @@ typedef struct ratelim_t { #define RATELIM_INIT(r) { (r), 0, 0 } -int rate_limit_is_ready(ratelim_t *lim, time_t now); char *rate_limit_log(ratelim_t *lim, time_t now); /* File helpers */ diff --git a/src/or/command.c b/src/or/command.c index ad8abfe5c9..ea0bbea1e5 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -288,7 +288,9 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn) /* hand it off to the cpuworkers, and then return. */ if (assign_onionskin_to_cpuworker(NULL, circ, onionskin) < 0) { - static ratelim_t handoff_warning = RATELIM_INIT(3600); +#define WARN_HANDOFF_FAILURE_INTERVAL (6*60*60) + static ratelim_t handoff_warning = + RATELIM_INIT(WARN_HANDOFF_FAILURE_INTERVAL); char *m; if ((m = rate_limit_log(&handoff_warning, approx_time()))) { log_warn(LD_GENERAL,"Failed to hand off onionskin. Closing.%s",m); |