aboutsummaryrefslogtreecommitdiff
path: root/src/or/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/connection.c')
-rw-r--r--src/or/connection.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/or/connection.c b/src/or/connection.c
index daf1e5a7f..40aa72d56 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -1638,14 +1638,20 @@ connection_bucket_init(void)
}
}
+/** DOCDOC */
static void
connection_bucket_refill_helper(int *bucket, int rate, int burst,
int seconds_elapsed, const char *name)
{
- if (*bucket < burst) {
- *bucket += rate*seconds_elapsed;
- if (*bucket > burst)
+ int starting_bucket = *bucket;
+ if (starting_bucket < burst) {
+ int incr = rate*seconds_elapsed;
+ *bucket += incr;
+ if (*bucket > burst || *bucket < starting_bucket) {
+ /* If we overflow the burst, or underflow our starting bucket,
+ * cap the bucket value to burst. */
*bucket = burst;
+ }
log(LOG_DEBUG, LD_NET,"%s now %d.", name, *bucket);
}
}