Unlock on return from network.Connect
This commit is contained in:
parent
b91c3147e7
commit
d72e91fb38
@ -676,12 +676,14 @@ func (n *network) advertise(client transport.Client, advertChan <-chan *router.A
|
|||||||
|
|
||||||
// Connect connects the network
|
// Connect connects the network
|
||||||
func (n *network) Connect() error {
|
func (n *network) Connect() error {
|
||||||
n.Lock()
|
n.RLock()
|
||||||
// return if already connected
|
// return if already connected
|
||||||
if n.connected {
|
if n.connected {
|
||||||
|
n.RUnlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n.Lock()
|
||||||
// try to resolve network nodes
|
// try to resolve network nodes
|
||||||
nodes, err := n.resolveNodes()
|
nodes, err := n.resolveNodes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -690,6 +692,7 @@ func (n *network) Connect() error {
|
|||||||
|
|
||||||
// connect network tunnel
|
// connect network tunnel
|
||||||
if err := n.Tunnel.Connect(); err != nil {
|
if err := n.Tunnel.Connect(); err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -701,6 +704,7 @@ func (n *network) Connect() error {
|
|||||||
// dial into ControlChannel to send route adverts
|
// dial into ControlChannel to send route adverts
|
||||||
ctrlClient, err := n.Tunnel.Dial(ControlChannel, tunnel.DialMulticast())
|
ctrlClient, err := n.Tunnel.Dial(ControlChannel, tunnel.DialMulticast())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -709,12 +713,14 @@ func (n *network) Connect() error {
|
|||||||
// listen on ControlChannel
|
// listen on ControlChannel
|
||||||
ctrlListener, err := n.Tunnel.Listen(ControlChannel)
|
ctrlListener, err := n.Tunnel.Listen(ControlChannel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// dial into NetworkChannel to send network messages
|
// dial into NetworkChannel to send network messages
|
||||||
netClient, err := n.Tunnel.Dial(NetworkChannel, tunnel.DialMulticast())
|
netClient, err := n.Tunnel.Dial(NetworkChannel, tunnel.DialMulticast())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -723,6 +729,7 @@ func (n *network) Connect() error {
|
|||||||
// listen on NetworkChannel
|
// listen on NetworkChannel
|
||||||
netListener, err := n.Tunnel.Listen(NetworkChannel)
|
netListener, err := n.Tunnel.Listen(NetworkChannel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,17 +738,20 @@ func (n *network) Connect() error {
|
|||||||
|
|
||||||
// start the router
|
// start the router
|
||||||
if err := n.options.Router.Start(); err != nil {
|
if err := n.options.Router.Start(); err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// start advertising routes
|
// start advertising routes
|
||||||
advertChan, err := n.options.Router.Advertise()
|
advertChan, err := n.options.Router.Advertise()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// start the server
|
// start the server
|
||||||
if err := n.server.Start(); err != nil {
|
if err := n.server.Start(); err != nil {
|
||||||
|
n.Unlock()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
n.Unlock()
|
n.Unlock()
|
||||||
|
Loading…
Reference in New Issue
Block a user