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