Close UAPI socket before exit

This commit is contained in:
Mathias Hall-Andersen 2017-08-01 12:14:38 +02:00
parent d7a49b8b8c
commit b03a6ab1b1
3 changed files with 29 additions and 7 deletions

View file

@ -186,6 +186,6 @@ func (device *Device) Close() {
close(device.signal.stop)
}
func (device *Device) Wait() {
<-device.signal.stop
func (device *Device) WaitChannel() chan struct{} {
return device.signal.stop
}

View file

@ -40,11 +40,11 @@ func NewLogger(level int) *Logger {
logger.Info = log.New(logInfo,
"INFO: ",
log.Ldate|log.Ltime|log.Lshortfile,
log.Ldate|log.Ltime,
)
logger.Error = log.New(logErr,
"ERROR: ",
log.Ldate|log.Ltime|log.Lshortfile,
log.Ldate|log.Ltime,
)
return logger
}

View file

@ -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")
}