mirror of https://github.com/status-im/consul.git
Fix segfault due to race condition for checking server versions (#7957)
The ACL monitoring routine uses c.routers to check for server version updates. Therefore it needs to be started after initializing the routers.
This commit is contained in:
parent
99eb583ebc
commit
0e4c65d422
|
@ -181,10 +181,6 @@ func NewClientLogger(config *Config, logger hclog.InterceptLogger, tlsConfigurat
|
||||||
return nil, fmt.Errorf("Failed to start lan serf: %v", err)
|
return nil, fmt.Errorf("Failed to start lan serf: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.acls.ACLsEnabled() {
|
|
||||||
go c.monitorACLMode()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start maintenance task for servers
|
// Start maintenance task for servers
|
||||||
c.routers = router.New(c.logger, c.shutdownCh, c.serf, c.connPool, "")
|
c.routers = router.New(c.logger, c.shutdownCh, c.serf, c.connPool, "")
|
||||||
go c.routers.Start()
|
go c.routers.Start()
|
||||||
|
@ -193,6 +189,12 @@ func NewClientLogger(config *Config, logger hclog.InterceptLogger, tlsConfigurat
|
||||||
// handlers depend on the router and the router depends on Serf.
|
// handlers depend on the router and the router depends on Serf.
|
||||||
go c.lanEventHandler()
|
go c.lanEventHandler()
|
||||||
|
|
||||||
|
// This needs to happen after initializing c.routers to prevent a race
|
||||||
|
// condition where the router manager is used when the pointer is nil
|
||||||
|
if c.acls.ACLsEnabled() {
|
||||||
|
go c.monitorACLMode()
|
||||||
|
}
|
||||||
|
|
||||||
if err := c.startEnterprise(); err != nil {
|
if err := c.startEnterprise(); err != nil {
|
||||||
c.Shutdown()
|
c.Shutdown()
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -235,6 +235,10 @@ func (m *Manager) FindServer() *metadata.Server {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Manager) checkServers(fn func(srv *metadata.Server) bool) bool {
|
func (m *Manager) checkServers(fn func(srv *metadata.Server) bool) bool {
|
||||||
|
if m == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
for _, srv := range m.getServerList().servers {
|
for _, srv := range m.getServerList().servers {
|
||||||
if !fn(srv) {
|
if !fn(srv) {
|
||||||
return false
|
return false
|
||||||
|
|
Loading…
Reference in New Issue