]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Wait for background jobs before finish message
authorSergey Matveev <stargrave@stargrave.org>
Sun, 27 Nov 2022 20:41:06 +0000 (23:41 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 13 Jan 2023 08:32:42 +0000 (11:32 +0300)
cmd/btrtrc/main.go
cmd/btrtrc/status.go
cmd/btrtrc/txstats.go

index 728976447c681ad3fb0ae78719a64a4c53e28fde..35880d9eeff85107c868f6955dd23515e1c26691 100644 (file)
@@ -68,22 +68,27 @@ func main() {
        defer client.Close()
 
        needsShutdown := make(chan os.Signal)
+       overallStatusCancel := make(chan struct{})
+       txStatsDumperCancel := make(chan struct{})
        signal.Notify(needsShutdown, syscall.SIGTERM, syscall.SIGINT)
        go func() {
                <-needsShutdown
-               txStatsDumpAll(client)
+               overallStatusCancel <- struct{}{}
+               txStatsDumperCancel <- struct{}{}
                client.Close()
        }()
 
        os.MkdirAll(path.Join(FIFOsDir, PeersDir), 0777)
        os.MkdirAll(path.Join(FIFOsDir, FilesDir), 0777)
        log.Println("started", client.PublicIPs())
-       go overallStatus(client)
+       go overallStatus(client, overallStatusCancel)
        go fifoList(client)
        go fifoDHTList(client)
        go fifoAdd(client)
        go fifoDel(client)
-       go txStatsDumper(client)
+       go txStatsDumper(client, txStatsDumperCancel)
        <-client.Closed()
+       <-overallStatusCancel
+       <-txStatsDumperCancel
        log.Println("finished")
 }
index ea8ac93abc575b378aaf9588d3b2e59a8e9d8054..f040d554824b56f04e7e2fcd8f84e64106fd0cbe 100644 (file)
@@ -8,9 +8,16 @@ import (
        "github.com/dustin/go-humanize"
 )
 
-func overallStatus(c *torrent.Client) {
+func overallStatus(c *torrent.Client, cancel chan struct{}) {
+       tick := time.Tick(time.Second)
        var prev torrent.ConnStats
-       for range time.Tick(time.Second) {
+       for {
+               select {
+               case <-cancel:
+                       close(cancel)
+                       return
+               case <-tick:
+               }
                stats := c.ConnStats()
                var peers int
                for _, t := range c.Torrents() {
index 2249e5663ee791edb412412ba3aebf89098ef45d..6ce62bab4ae918679de0dba13c4ad24702a2ef56 100644 (file)
@@ -60,8 +60,15 @@ func txStatsDumpAll(c *torrent.Client) {
        }
 }
 
-func txStatsDumper(c *torrent.Client) {
-       for range time.Tick(10 * time.Second) {
+func txStatsDumper(c *torrent.Client, cancel chan struct{}) {
+       tick := time.Tick(10 * time.Second)
+       for {
                txStatsDumpAll(c)
+               select {
+               case <-cancel:
+                       close(cancel)
+                       return
+               case <-tick:
+               }
        }
 }