From d4d3cc422b809d17daa18966ac95a852fc3045a5 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 4 Mar 2020 17:44:22 +0100 Subject: Improve exiting (actually it was Mattermost that was creating a deadlock) --- connector/external/external.go | 16 +++++++++------- connector/mattermost/mattermost.go | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'connector') diff --git a/connector/external/external.go b/connector/external/external.go index b66ab6c..9896750 100644 --- a/connector/external/external.go +++ b/connector/external/external.go @@ -177,6 +177,7 @@ func (ext *External) restartLoop(generation int) { break } log.Printf("Process %s stopped, restarting.", ext.command) + log.Printf("Generation %d vs %d", ext.generation, generation) err := ext.setupProc(generation) if err != nil { ext.proc = nil @@ -326,22 +327,23 @@ func (ext *External) Close() { ext.sendJson.Encode(&extMessage{ MsgType: CLOSE, }) + ext.proc.Process.Signal(os.Interrupt) - proc := ext.proc - proc.Process.Signal(os.Interrupt) ext.recvPipe.Close() ext.sendPipe.Close() + go func() { + time.Sleep(1 * time.Second) + log.Info("Sending SIGKILL to external process (did not terminate within 1 second)") + ext.proc.Process.Kill() + }() + ext.proc.Wait() + ext.proc = nil ext.recvPipe = nil ext.sendPipe = nil ext.sendJson = nil ext.handlerChan = nil - - go func() { - time.Sleep(1 * time.Second) - proc.Process.Kill() - }() } // ---- Actual message handling :) diff --git a/connector/mattermost/mattermost.go b/connector/mattermost/mattermost.go index 0a632a9..ea49fd2 100644 --- a/connector/mattermost/mattermost.go +++ b/connector/mattermost/mattermost.go @@ -59,7 +59,7 @@ func (mm *Mattermost) Configure(c Configuration) error { } // Reinitialize shared data structures - mm.handlerStopChan = make(chan bool) + mm.handlerStopChan = make(chan bool, 1) mm.caches.mmusers = make(map[string]string) mm.caches.sentjoined = make(map[string]bool) -- cgit v1.2.3