diff --git a/limiter_atomic_int64.go b/limiter_atomic_int64.go index 38604ba..8f2e66c 100644 --- a/limiter_atomic_int64.go +++ b/limiter_atomic_int64.go @@ -82,6 +82,12 @@ func (t *atomicInt64Limiter) Take() time.Time { break } } - t.clock.Sleep(time.Duration(newTimeOfNextPermissionIssue - now)) - return time.Unix(0, newTimeOfNextPermissionIssue) + + sleepDuration := time.Duration(newTimeOfNextPermissionIssue - now) + if sleepDuration > 0 { + t.clock.Sleep(sleepDuration) + return time.Unix(0, newTimeOfNextPermissionIssue) + } + // return now if we don't sleep as atomicLimiter does + return time.Unix(0, now) } diff --git a/ratelimit.go b/ratelimit.go index 7370526..22b88ec 100644 --- a/ratelimit.go +++ b/ratelimit.go @@ -54,7 +54,7 @@ type config struct { // New returns a Limiter that will limit to the given RPS. func New(rate int, opts ...Option) Limiter { - return newAtomicBased(rate, opts...) + return newAtomicInt64Based(rate, opts...) } // buildConfig combines defaults with options.