]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Close UAPI socket before exit
authorMathias Hall-Andersen <mathias@hall-andersen.dk>
Tue, 1 Aug 2017 10:14:38 +0000 (12:14 +0200)
committerMathias Hall-Andersen <mathias@hall-andersen.dk>
Tue, 1 Aug 2017 10:15:20 +0000 (12:15 +0200)
src/device.go
src/logger.go
src/main.go

index d32d6486cca952022cb544a327e403279c528978..1185d609a3703318d40dd9bcf11e7aa098f69d6e 100644 (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
 }
index 827f9e9b18a70770844f684c8ebac0856b47e2e0..9fe73b43196e023b347a7045cc88046ce2b31924 100644 (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
 }
index 0857999c098c8189230c9f5820f66182a18f71e5..dde21fb02ad3b5e8466db046f9ed7c495e003ead 100644 (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")
 }