|  | @@ -69,11 +69,6 @@ func (v *TimedUserValidator) Release() {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	v.running = false
 | 
	
		
			
				|  |  | -	v.validUsers = nil
 | 
	
		
			
				|  |  | -	v.userHash = nil
 | 
	
		
			
				|  |  | -	v.ids = nil
 | 
	
		
			
				|  |  | -	v.hasher = nil
 | 
	
		
			
				|  |  | -	v.cancel = nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (v *TimedUserValidator) generateNewHashes(nowSec protocol.Timestamp, idx int, entry *idEntry) {
 | 
	
	
		
			
				|  | @@ -89,10 +84,8 @@ func (v *TimedUserValidator) generateNewHashes(nowSec protocol.Timestamp, idx in
 | 
	
		
			
				|  |  |  		idHash.Sum(hashValueRemoval[:0])
 | 
	
		
			
				|  |  |  		idHash.Reset()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		v.Lock()
 | 
	
		
			
				|  |  |  		v.userHash[hashValue] = &indexTimePair{idx, entry.lastSec}
 | 
	
		
			
				|  |  |  		delete(v.userHash, hashValueRemoval)
 | 
	
		
			
				|  |  | -		v.Unlock()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		entry.lastSec++
 | 
	
		
			
				|  |  |  		entry.lastSecRemoval++
 | 
	
	
		
			
				|  | @@ -107,9 +100,11 @@ func (v *TimedUserValidator) updateUserHash(interval time.Duration) {
 | 
	
		
			
				|  |  |  		select {
 | 
	
		
			
				|  |  |  		case now := <-time.After(interval):
 | 
	
		
			
				|  |  |  			nowSec := protocol.Timestamp(now.Unix() + cacheDurationSec)
 | 
	
		
			
				|  |  | +			v.Lock()
 | 
	
		
			
				|  |  |  			for _, entry := range v.ids {
 | 
	
		
			
				|  |  |  				v.generateNewHashes(nowSec, entry.userIdx, entry)
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			v.Unlock()
 | 
	
		
			
				|  |  |  		case <-v.cancel.WaitForCancel():
 | 
	
		
			
				|  |  |  			return
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -117,6 +112,9 @@ func (v *TimedUserValidator) updateUserHash(interval time.Duration) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (v *TimedUserValidator) Add(user *protocol.User) error {
 | 
	
		
			
				|  |  | +	v.Lock()
 | 
	
		
			
				|  |  | +	defer v.Unlock()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	idx := len(v.validUsers)
 | 
	
		
			
				|  |  |  	v.validUsers = append(v.validUsers, user)
 | 
	
		
			
				|  |  |  	rawAccount, err := user.GetTypedAccount()
 |