From b03a6ab1b1ef422d832a5451312ecae1363fa171 Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Tue, 1 Aug 2017 12:14:38 +0200 Subject: Close UAPI socket before exit --- src/main.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'src/main.go') diff --git a/src/main.go b/src/main.go index 0857999..dde21fb 100644 --- a/src/main.go +++ b/src/main.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "os" + "os/signal" "runtime" ) @@ -78,17 +79,38 @@ func main() { if err != nil { logError.Fatal("UAPI listen error:", err) } - defer uapi.Close() + + errs := make(chan error) + term := make(chan os.Signal) + wait := device.WaitChannel() go func() { for { conn, err := uapi.Accept() if err != nil { - logError.Fatal("UAPI accept error:", err) + errs <- err + return } go ipcHandle(device, conn) } }() - device.Wait() + logInfo.Println("UAPI listener started") + + // wait for program to terminate + + signal.Notify(term, os.Kill) + signal.Notify(term, os.Interrupt) + + select { + case <-wait: + case <-term: + case <-errs: + } + + // clean up UAPI bind + + uapi.Close() + + logInfo.Println("Closing") } -- cgit v1.2.3