summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/rate_ctr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/rate_ctr.c b/src/rate_ctr.c
index e48c7792..f58b5c4a 100644
--- a/src/rate_ctr.c
+++ b/src/rate_ctr.c
@@ -24,6 +24,7 @@
#include <inttypes.h>
#include <string.h>
+#include <osmocore/utils.h>
#include <osmocore/linuxlist.h>
#include <osmocore/talloc.h>
#include <osmocore/timer.h>
@@ -75,6 +76,11 @@ static void interval_expired(struct rate_ctr *ctr, enum rate_ctr_intv intv)
ctr->intv[intv].rate = ctr->current - ctr->intv[intv].last;
/* save current counter for next interval */
ctr->intv[intv].last = ctr->current;
+
+ /* update the rate of the next bigger interval. This will
+ * be overwritten when that next larger interval expires */
+ if (intv + 1 < ARRAY_SIZE(ctr->intv))
+ ctr->intv[intv+1].rate += ctr->intv[intv].rate;
}
static struct timer_list rate_ctr_timer;