ratequeue: Handle bucket emptying more correctly.
authorFredrik Tolf <fredrik@dolda2000.com>
Sun, 6 Feb 2022 17:14:30 +0000 (18:14 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Sun, 6 Feb 2022 17:14:30 +0000 (18:14 +0100)
src/ratequeue.c

index dc7e198..6d654c9 100644 (file)
@@ -316,9 +316,9 @@ static void tickbucket(struct bucket *bk)
     bk->last = now;
     ll = bk->level;
     if((bk->level -= delta * cf.rate) < 0) {
-       bk->level = 0;
        if(ll > 0)
-           bk->etime = now;
+           bk->etime = now + (bk->level / cf.rate);
+       bk->level = 0;
     }
     while((bk->brim.d > 0) && (bk->level < cf.size)) {
        if(sendreq(child, bk->brim.b[0].req, bk->brim.b[0].fd)) {