]> git.ipfire.org Git - people/ms/systemd.git/blame - ratelimit.c
ratelimit start requests
[people/ms/systemd.git] / ratelimit.c
CommitLineData
1e2e8133
LP
1/*-*- Mode: C; c-basic-offset: 8 -*-*/
2
3#include <assert.h>
4
5#include "ratelimit.h"
6#include "log.h"
7
8/* Modelled after Linux' lib/ratelimit.c by Dave Young
9 * <hidave.darkstar@gmail.com>, which is licensed GPLv2. */
10
11bool ratelimit_test(RateLimit *r) {
12 usec_t timestamp;
13
14 timestamp = now(CLOCK_MONOTONIC);
15
16 assert(r);
17 assert(r->interval > 0);
18 assert(r->burst > 0);
19
20 if (r->begin <= 0 ||
21 r->begin + r->interval < timestamp) {
22
23 if (r->n_missed > 0)
24 log_warning("%u events suppressed", r->n_missed);
25
26 r->begin = timestamp;
27
28 /* Reset counters */
29 r->n_printed = 0;
30 r->n_missed = 0;
31 goto good;
32 }
33
34 if (r->n_printed <= r->burst)
35 goto good;
36
37 r->n_missed++;
38 return false;
39
40good:
41 r->n_printed++;
42 return true;
43}