mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 01:13:45 +00:00
p2p/simulations: Only register services once
Signed-off-by: Lewis Marshall <lewis@lmars.net>
This commit is contained in:
parent
c8e645817b
commit
74d40d67b0
1 changed files with 21 additions and 12 deletions
|
|
@ -147,6 +147,7 @@ type SimNode struct {
|
|||
node *node.Node
|
||||
running map[string]node.Service
|
||||
client *rpc.Client
|
||||
registerOnce sync.Once
|
||||
}
|
||||
|
||||
// Addr returns the node's discovery address
|
||||
|
|
@ -210,8 +211,6 @@ func (self *SimNode) Snapshots() (map[string][]byte, error) {
|
|||
|
||||
// Start starts the RPC handler and the underlying service
|
||||
func (self *SimNode) Start(snapshots map[string][]byte) error {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
newService := func(name string) func(ctx *node.ServiceContext) (node.Service, error) {
|
||||
return func(nodeCtx *node.ServiceContext) (node.Service, error) {
|
||||
ctx := &ServiceContext{
|
||||
|
|
@ -232,11 +231,18 @@ func (self *SimNode) Start(snapshots map[string][]byte) error {
|
|||
}
|
||||
}
|
||||
|
||||
var regErr error
|
||||
self.registerOnce.Do(func() {
|
||||
for _, name := range self.config.Services {
|
||||
if err := self.node.Register(newService(name)); err != nil {
|
||||
return err
|
||||
regErr = err
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
if regErr != nil {
|
||||
return regErr
|
||||
}
|
||||
|
||||
if err := self.node.Start(); err != nil {
|
||||
return err
|
||||
|
|
@ -247,7 +253,10 @@ func (self *SimNode) Start(snapshots map[string][]byte) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
self.lock.Lock()
|
||||
self.client = rpc.DialInProc(handler)
|
||||
self.lock.Unlock()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue