From ddba26e699a7bb26b8cbd8a22137621a5e682ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Sun, 23 Dec 2018 18:24:10 +0100 Subject: [PATCH] cleanup: close connection before performing cleanup To ensure that new listeners / files aren't created after / during the cleanup (e.g. through RPL_MONONLINE messages). Discussion: Sending a QUIT command and blocking until the client quit would be preferable, unfortunately such a command is not available. See: https://github.com/lrstanley/girc/issues/16 --- hii.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/hii.go b/hii.go index e427a96..55f95f6 100644 --- a/hii.go +++ b/hii.go @@ -94,7 +94,8 @@ func usage() { os.Exit(2) } -func cleanup() { +func cleanup(client *girc.Client) { + client.Close() for _, dir := range ircDirs { err := removeListener(dir.name) if err != nil { @@ -103,8 +104,8 @@ func cleanup() { } } -func die(err error) { - cleanup() +func die(client *girc.Client, err error) { + cleanup(client) log.Fatal(err) } @@ -460,7 +461,7 @@ func serveNicks(client *girc.Client, name string, dir *ircDir) { var err error dir.ch.ln, err = net.Listen("unix", nickfp) if err != nil { - die(err) + die(client, err) } for { @@ -622,7 +623,7 @@ func handleMsg(client *girc.Client, event girc.Event) { names, err := getEventDirs(client, &event) if err != nil { - die(err) + die(client, err) } for _, name := range names { @@ -718,12 +719,12 @@ func main() { signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGHUP) go func() { <-sig - cleanup() + cleanup(client) os.Exit(1) }() err = client.Connect() - cleanup() + cleanup(client) if err != nil { log.Fatal(err) }