Fix data race on morph component init #1444
4 changed files with 13 additions and 11 deletions
|
@ -13,9 +13,7 @@ import (
|
|||
)
|
||||
|
||||
func initAccountingService(ctx context.Context, c *cfg) {
|
||||
if c.cfgMorph.client == nil {
|
||||
initMorphComponents(ctx, c)
|
||||
}
|
||||
c.initMorphComponents(ctx)
|
||||
|
||||
balanceMorphWrapper, err := balance.NewFromMorph(c.cfgMorph.client, c.cfgAccounting.scriptHash, 0)
|
||||
fatalOnErr(err)
|
||||
|
|
|
@ -575,6 +575,9 @@ func (c *cfgGRPC) dropConnection(endpoint string) {
|
|||
}
|
||||
|
||||
type cfgMorph struct {
|
||||
initialized bool
|
||||
guard sync.Mutex
|
||||
|
||||
client *client.Client
|
||||
|
||||
notaryEnabled bool
|
||||
|
@ -1455,10 +1458,7 @@ func (c *cfg) createTombstoneSource() *tombstone.ExpirationChecker {
|
|||
|
||||
func (c *cfg) createContainerInfoProvider(ctx context.Context) container.InfoProvider {
|
||||
return container.NewInfoProvider(func() (container.Source, error) {
|
||||
// threadsafe: called on init or on sighup when morph initialized
|
||||
if c.cfgMorph.client == nil {
|
||||
initMorphComponents(ctx, c)
|
||||
}
|
||||
c.initMorphComponents(ctx)
|
||||
cc, err := containerClient.NewFromMorph(c.cfgMorph.client, c.cfgContainer.scriptHash, 0, containerClient.TryNotary())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -28,7 +28,12 @@ const (
|
|||
notaryDepositRetriesAmount = 300
|
||||
)
|
||||
|
||||
func initMorphComponents(ctx context.Context, c *cfg) {
|
||||
func (c *cfg) initMorphComponents(ctx context.Context) {
|
||||
c.cfgMorph.guard.Lock()
|
||||
defer c.cfgMorph.guard.Unlock()
|
||||
if c.cfgMorph.initialized {
|
||||
return
|
||||
}
|
||||
initMorphClient(ctx, c)
|
||||
|
||||
lookupScriptHashesInNNS(c) // smart contract auto negotiation
|
||||
|
@ -70,6 +75,7 @@ func initMorphComponents(ctx context.Context, c *cfg) {
|
|||
|
||||
c.netMapSource = netmapSource
|
||||
c.cfgNetmap.wrapper = wrap
|
||||
c.cfgMorph.initialized = true
|
||||
}
|
||||
|
||||
func initMorphClient(ctx context.Context, c *cfg) {
|
||||
|
|
|
@ -143,9 +143,7 @@ func initNetmapService(ctx context.Context, c *cfg) {
|
|||
parseAttributes(c)
|
||||
c.cfgNodeInfo.localInfo.SetStatus(netmapSDK.Offline)
|
||||
|
||||
if c.cfgMorph.client == nil {
|
||||
initMorphComponents(ctx, c)
|
||||
}
|
||||
c.initMorphComponents(ctx)
|
||||
|
||||
initNetmapState(c)
|
||||
|
||||
|
|
Loading…
Reference in a new issue