diff options
Diffstat (limited to 'lib/ratelimit.c')
-rw-r--r-- | lib/ratelimit.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/ratelimit.c b/lib/ratelimit.c index a7aaebb7a7189..ab8472edeb1d2 100644 --- a/lib/ratelimit.c +++ b/lib/ratelimit.c @@ -103,13 +103,16 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) } } if (burst) { - int n_left; + int n_left = atomic_read(&rs->rs_n_left); /* The burst might have been taken by a parallel call. */ - n_left = atomic_dec_return(&rs->rs_n_left); - if (n_left >= 0) { - ret = 1; - goto unlock_ret; + + if (n_left > 0) { + n_left = atomic_dec_return(&rs->rs_n_left); + if (n_left >= 0) { + ret = 1; + goto unlock_ret; + } } } |