Browse Source

p2p: comment on the wg.Add before go saveRoutine()

Just noticed while auditing the code in p2p/addrbook.go,
wg.Add(1) but no subsequent defer.
@jaekwon and I had a discussion offline and we agreed to
comment about why the code was that way and why
we shouldn't move the wg.Add(1) into .saveRoutine() because
if go a.saveRoutine() isn't started before anyone invokes
a.Wait(), then we'd have raced a.saveRoutine().
pull/844/head
Emmanuel Odeke 7 years ago
parent
commit
62c1bc0a20
No known key found for this signature in database GPG Key ID: 1CA47A292F89DD40
1 changed files with 6 additions and 1 deletions
  1. +6
    -1
      p2p/addrbook.go

+ 6
- 1
p2p/addrbook.go View File

@ -127,8 +127,12 @@ func (a *AddrBook) init() {
func (a *AddrBook) OnStart() error {
a.BaseService.OnStart()
a.loadFromFile(a.filePath)
// wg.Add to ensure that any invocation of .Wait()
// later on will wait for saveRoutine to terminate.
a.wg.Add(1)
go a.saveRoutine()
return nil
}
@ -391,6 +395,8 @@ func (a *AddrBook) Save() {
/* Private methods */
func (a *AddrBook) saveRoutine() {
defer a.wg.Done()
dumpAddressTicker := time.NewTicker(dumpAddressInterval)
out:
for {
@ -403,7 +409,6 @@ out:
}
dumpAddressTicker.Stop()
a.saveToFile(a.filePath)
a.wg.Done()
a.Logger.Info("Address handler done")
}


Loading…
Cancel
Save