r17949@catbus: nickm | 2008-02-06 13:21:12 -0500

Fix bandwidth bucked calculations again, I think. Bugfix on 0.1.2.x. Backport candidate.


svn:r13406
This commit is contained in:
Nick Mathewson 2008-02-06 18:21:16 +00:00
parent a869574c56
commit 6e2946fb5d
2 changed files with 15 additions and 7 deletions

View file

@ -47,6 +47,8 @@ Changes in version 0.2.0.19-alpha - 2008-02-??
- If an attempt to launch a DNS resolve request over the control
port fails because we have overrun the limit on the number of
connections, tell the controller that the request has failed.
- Avoid using too little bandwidth when Tor skips a few seconds. Bugfix
on 0.1.2.x.
o Code simplifications and refactoring:
- Remove some needless generality from cpuworker code, for improved

View file

@ -1659,13 +1659,19 @@ connection_bucket_refill_helper(int *bucket, int rate, int burst,
int seconds_elapsed, const char *name)
{
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;
if (starting_bucket < burst && seconds_elapsed) {
if (((burst - starting_bucket)/seconds_elapsed) < rate) {
*bucket = burst; /* We would overflow the bucket; just set it to
* the maximum. */
} else {
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. */
/* XXXX020 this might be redundant now. */
*bucket = burst;
}
}
log(LOG_DEBUG, LD_NET,"%s now %d.", name, *bucket);
}