Don't generate duplicated hash

pull/40/head
V2Ray 2015-10-10 21:29:26 +02:00
parent 7f6878fbc3
commit ab151cc053
1 changed files with 4 additions and 6 deletions

View File

@ -42,8 +42,7 @@ func NewTimedUserSet() UserSet {
} }
func (us *TimedUserSet) removeEntries(entries <-chan interface{}) { func (us *TimedUserSet) removeEntries(entries <-chan interface{}) {
for { for entry := range entries {
entry := <-entries
us.access.Lock() us.access.Lock()
delete(us.userHash, entry.(string)) delete(us.userHash, entry.(string))
us.access.Unlock() us.access.Unlock()
@ -52,7 +51,7 @@ func (us *TimedUserSet) removeEntries(entries <-chan interface{}) {
func (us *TimedUserSet) generateNewHashes(lastSec, nowSec int64, idx int, id ID) { func (us *TimedUserSet) generateNewHashes(lastSec, nowSec int64, idx int, id ID) {
idHash := NewTimeHash(HMACHash{}) idHash := NewTimeHash(HMACHash{})
for lastSec < nowSec+cacheDurationSec { for lastSec < nowSec {
idHash := idHash.Hash(id.Bytes[:], lastSec) idHash := idHash.Hash(id.Bytes[:], lastSec)
us.access.Lock() us.access.Lock()
us.userHash[string(idHash)] = indexTimePair{idx, lastSec} us.userHash[string(idHash)] = indexTimePair{idx, lastSec}
@ -66,9 +65,8 @@ func (us *TimedUserSet) updateUserHash(tick <-chan time.Time) {
now := time.Now().UTC() now := time.Now().UTC()
lastSec := now.Unix() lastSec := now.Unix()
for { for now := range tick {
now := <-tick nowSec := now.UTC().Unix() + cacheDurationSec
nowSec := now.UTC().Unix()
for idx, id := range us.validUserIds { for idx, id := range us.validUserIds {
us.generateNewHashes(lastSec, nowSec, idx, id) us.generateNewHashes(lastSec, nowSec, idx, id)
} }