From 71ea6700a2465a0a91d74f3adf3beaecfa30a7b6 Mon Sep 17 00:00:00 2001 From: "Owain G. Ainsworth" Date: Wed, 2 Oct 2013 20:27:08 +0100 Subject: [PATCH] Hold amgr lock in {load,save}Peers. We're traversing internal datastructures here. --- addrmanager.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addrmanager.go b/addrmanager.go index 25eed9a8b..38a4956f5 100644 --- a/addrmanager.go +++ b/addrmanager.go @@ -418,6 +418,8 @@ type serialisedAddrManager struct { // savePeers saves all the known addresses to a file so they can be read back // in at next run. func (a *AddrManager) savePeers() { + a.mtx.Lock() + defer a.mtx.Unlock() // First we make a serialisable datastructure so we can encode it to // json. @@ -474,6 +476,9 @@ func (a *AddrManager) savePeers() { // loadPeers loads the known address from the saved file. If empty, missing, or // malformed file, just don't load anything and start fresh func (a *AddrManager) loadPeers() { + a.mtx.Lock() + defer a.mtx.Unlock() + // May give some way to specify this later. filename := "peers.json" filePath := filepath.Join(cfg.DataDir, filename) @@ -492,7 +497,7 @@ func (a *AddrManager) loadPeers() { return } log.Infof("[AMGR] Successfuly loaded %d addresses from %s", - a.NumAddresses(), filePath) + a.nNew + a.nTried, filePath) } func (a *AddrManager) deserialisePeers(filePath string) error {