]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Simpler cancellation with global variables
authorSergey Matveev <stargrave@stargrave.org>
Mon, 28 Nov 2022 14:55:14 +0000 (17:55 +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 70bc8c9084430f02ee3efb5d4fb014725e407595..880348be67ec56af8ffd1c05e187c6da9280656f 100644 (file)
@@ -7,6 +7,7 @@ import (
        "os"
        "os/signal"
        "strings"
+       "sync"
        "syscall"
 
        "github.com/anacrolix/dht/v2"
@@ -18,6 +19,11 @@ import (
 
 const TorrentExt = ".torrent"
 
+var (
+       Cancel = make(chan struct{})
+       Jobs   sync.WaitGroup
+)
+
 func main() {
        log.SetFlags(log.Ldate | log.Ltime)
        dhtBoot := flag.String("dht", "dht.cypherpunks.ru:8991", "Comma-separated list of DHT bootstrap nodes")
@@ -63,27 +69,25 @@ 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
-               overallStatusCancel <- struct{}{}
-               txStatsDumperCancel <- struct{}{}
+               close(Cancel)
                client.Close()
        }()
 
        fifosPrepare()
        log.Println("started", client.PublicIPs())
-       go overallStatus(client, overallStatusCancel)
+       Jobs.Add(1)
+       go overallStatus(client)
        go fifoList(client)
        go fifoDHTList(client)
        go fifoAdd(client)
        go fifoDel(client)
-       go txStatsDumper(client, txStatsDumperCancel)
+       Jobs.Add(1)
+       go txStatsDumper(client)
        <-client.Closed()
-       <-overallStatusCancel
-       <-txStatsDumperCancel
+       Jobs.Wait()
        fifosCleanup()
        log.Println("finished")
 }
index 3d937efabd445b8f250f09ee64d53f6c91feb71d..8cb0cbc479146caea5ba1421980498fb9f2de329 100644 (file)
@@ -8,13 +8,13 @@ import (
        "github.com/dustin/go-humanize"
 )
 
-func overallStatus(c *torrent.Client, cancel chan struct{}) {
+func overallStatus(c *torrent.Client) {
        tick := time.Tick(time.Second)
        var prev torrent.ConnStats
        for {
                select {
-               case <-cancel:
-                       close(cancel)
+               case <-Cancel:
+                       Jobs.Done()
                        return
                case <-tick:
                }
index 6ce62bab4ae918679de0dba13c4ad24702a2ef56..f05a4b8fd2955270075c06a56f82ef5fc6e24e69 100644 (file)
@@ -60,13 +60,13 @@ func txStatsDumpAll(c *torrent.Client) {
        }
 }
 
-func txStatsDumper(c *torrent.Client, cancel chan struct{}) {
+func txStatsDumper(c *torrent.Client) {
        tick := time.Tick(10 * time.Second)
        for {
                txStatsDumpAll(c)
                select {
-               case <-cancel:
-                       close(cancel)
+               case <-Cancel:
+                       Jobs.Done()
                        return
                case <-tick:
                }