diff --git a/common/collect/timed_queue.go b/common/collect/timed_queue.go index 7a3cfcef..375316f0 100644 --- a/common/collect/timed_queue.go +++ b/common/collect/timed_queue.go @@ -72,14 +72,14 @@ func (queue *TimedQueue) RemovedEntries() <-chan interface{} { func (queue *TimedQueue) cleanup(tick <-chan time.Time) { for now := range tick { - queue.access.RLock() - queueLen := queue.queue.Len() - queue.access.RUnlock() - if queueLen == 0 { - continue - } nowSec := now.UTC().Unix() for { + queue.access.RLock() + queueLen := queue.queue.Len() + queue.access.RUnlock() + if queueLen == 0 { + break + } queue.access.RLock() entry := queue.queue[0] queue.access.RUnlock() diff --git a/proxy/vmess/protocol/user/userset.go b/proxy/vmess/protocol/user/userset.go index 81782f83..5968914d 100644 --- a/proxy/vmess/protocol/user/userset.go +++ b/proxy/vmess/protocol/user/userset.go @@ -62,8 +62,7 @@ func (us *TimedUserSet) generateNewHashes(lastSec, nowSec int64, idx int, id ID) } func (us *TimedUserSet) updateUserHash(tick <-chan time.Time) { - now := time.Now().UTC() - lastSec := now.Unix() + lastSec := time.Now().UTC().Unix() - cacheDurationSec for now := range tick { nowSec := now.UTC().Unix() + cacheDurationSec @@ -81,7 +80,7 @@ func (us *TimedUserSet) AddUser(user User) error { nowSec := time.Now().UTC().Unix() lastSec := nowSec - cacheDurationSec - us.generateNewHashes(lastSec, nowSec, idx, id) + us.generateNewHashes(lastSec, nowSec+cacheDurationSec, idx, id) return nil }