forked from cwtch.im/cwtch
Fixing shutdown flow
This commit is contained in:
parent
29852508d9
commit
101cce532f
|
@ -36,6 +36,8 @@ type engine struct {
|
|||
|
||||
// Required for listen(), inaccessible from identity
|
||||
privateKey ed25519.PrivateKey
|
||||
|
||||
shuttingDown bool
|
||||
}
|
||||
|
||||
// Engine (ProtocolEngine) encapsulates the logic necessary to make and receive Cwtch connections.
|
||||
|
@ -133,10 +135,10 @@ func (e *engine) eventHandler() {
|
|||
func (e *engine) createPeerTemplate() *PeerApp {
|
||||
peerAppTemplate := new(PeerApp)
|
||||
peerAppTemplate.MessageHandler = e.handlePeerMessage
|
||||
peerAppTemplate.OnAcknowledgement = e.peerAck
|
||||
peerAppTemplate.OnAuth = e.peerAuthed
|
||||
peerAppTemplate.OnConnecting = e.peerConnecting
|
||||
peerAppTemplate.OnClose = e.peerDisconnected
|
||||
peerAppTemplate.OnAcknowledgement = e.ignoreOnShutdown(e.peerAck)
|
||||
peerAppTemplate.OnAuth = e.ignoreOnShutdown(e.peerAuthed)
|
||||
peerAppTemplate.OnConnecting = e.ignoreOnShutdown(e.peerConnecting)
|
||||
peerAppTemplate.OnClose = e.ignoreOnShutdown(e.peerDisconnected)
|
||||
return peerAppTemplate
|
||||
}
|
||||
|
||||
|
@ -149,6 +151,7 @@ func (e *engine) listenFn() {
|
|||
|
||||
// Shutdown tears down the eventHandler goroutine
|
||||
func (e *engine) Shutdown() {
|
||||
e.shuttingDown = true
|
||||
e.service.Shutdown()
|
||||
e.connectionsManager.Shutdown()
|
||||
e.queue.Shutdown()
|
||||
|
@ -159,6 +162,10 @@ func (e *engine) peerWithOnion(onion string) {
|
|||
e.service.Connect(onion, e.createPeerTemplate())
|
||||
}
|
||||
|
||||
func (e * engine) ignoreOnShutdown(f func(string)) func(string){
|
||||
return func (x string) {if !e.shuttingDown{f(x)} }
|
||||
}
|
||||
|
||||
func (e *engine) peerAuthed(onion string) {
|
||||
e.eventManager.Publish(event.NewEvent(event.PeerStateChange, map[event.Field]string{
|
||||
event.RemotePeer: string(onion),
|
||||
|
|
Loading…
Reference in New Issue