Let Wallet call walletsNoLock to avoid double read lock

This commit is contained in:
BurtonQin 2020-02-12 17:50:32 +08:00
parent 34bb132b10
commit 928b4bfba8

View file

@ -141,6 +141,11 @@ func (am *Manager) Wallets() []Wallet {
am.lock.RLock() am.lock.RLock()
defer am.lock.RUnlock() defer am.lock.RUnlock()
return am.walletsNoLock()
}
// Wallets without lock.
func (am *Manager) walletsNoLock() []Wallet {
cpy := make([]Wallet, len(am.wallets)) cpy := make([]Wallet, len(am.wallets))
copy(cpy, am.wallets) copy(cpy, am.wallets)
return cpy return cpy
@ -155,7 +160,7 @@ func (am *Manager) Wallet(url string) (Wallet, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, wallet := range am.Wallets() { for _, wallet := range am.walletsNoLock() {
if wallet.URL() == parsed { if wallet.URL() == parsed {
return wallet, nil return wallet, nil
} }