Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : 3 : : #include <sys/time.h> 4 : : 5 : : #include "macro.h" 6 : : #include "ratelimit.h" 7 : : 8 : : /* Modelled after Linux' lib/ratelimit.c by Dave Young 9 : : * <hidave.darkstar@gmail.com>, which is licensed GPLv2. */ 10 : : 11 : 40136 : bool ratelimit_below(RateLimit *r) { 12 : : usec_t ts; 13 : : 14 [ - + ]: 40136 : assert(r); 15 : : 16 [ + + - + ]: 40136 : if (r->interval <= 0 || r->burst <= 0) 17 : 40052 : return true; 18 : : 19 : 84 : ts = now(CLOCK_MONOTONIC); 20 : : 21 [ + + ]: 84 : if (r->begin <= 0 || 22 [ + + ]: 80 : r->begin + r->interval < ts) { 23 : 8 : r->begin = ts; 24 : : 25 : : /* Reset counter */ 26 : 8 : r->num = 0; 27 : 8 : goto good; 28 : : } 29 : : 30 [ + + ]: 76 : if (r->num < r->burst) 31 : 72 : goto good; 32 : : 33 : 4 : return false; 34 : : 35 : 80 : good: 36 : 80 : r->num++; 37 : 80 : return true; 38 : : }