accounts: fix uses of sync.RWMutex
RWMutexes must be write-locked when writing in order to actually protect the writes.
This commit is contained in:
		
							parent
							
								
									afc530ea41
								
							
						
					
					
						commit
						d6a7332993
					
				| @ -111,9 +111,9 @@ func (am *AccountManager) SignLocked(a Account, keyAuth string, toSign []byte) ( | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	am.mutex.RLock() | 	am.mutex.Lock() | ||||||
| 	am.unlockedKeys[string(a.Address)] = *key | 	am.unlockedKeys[string(a.Address)] = *key | ||||||
| 	am.mutex.RUnlock() | 	am.mutex.Unlock() | ||||||
| 	go unlockLater(am, a.Address) | 	go unlockLater(am, a.Address) | ||||||
| 	signature, err = crypto.Sign(toSign, key.PrivateKey) | 	signature, err = crypto.Sign(toSign, key.PrivateKey) | ||||||
| 	return signature, err | 	return signature, err | ||||||
| @ -147,8 +147,10 @@ func unlockLater(am *AccountManager, addr []byte) { | |||||||
| 	select { | 	select { | ||||||
| 	case <-time.After(am.unlockTime): | 	case <-time.After(am.unlockTime): | ||||||
| 	} | 	} | ||||||
| 	am.mutex.RLock() | 	am.mutex.Lock() | ||||||
| 	// TODO: how do we know the key is actually gone from memory?
 | 	// TODO: how do we know the key is actually gone from memory?
 | ||||||
| 	delete(am.unlockedKeys, string(addr)) | 	delete(am.unlockedKeys, string(addr)) | ||||||
| 	am.mutex.RUnlock() | 	am.mutex.Unlock() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user