github.com/ncw/rclone@v1.48.1-0.20190724201158-a35aa1360e3e/fs/accounting/accounting_unix.go (about) 1 // Accounting and limiting reader 2 // Unix specific functions. 3 4 // +build darwin dragonfly freebsd linux netbsd openbsd solaris 5 6 package accounting 7 8 import ( 9 "os" 10 "os/signal" 11 "syscall" 12 13 "github.com/ncw/rclone/fs" 14 ) 15 16 // startSignalHandler() sets a signal handler to catch SIGUSR2 and toggle throttling. 17 func startSignalHandler() { 18 signals := make(chan os.Signal, 1) 19 signal.Notify(signals, syscall.SIGUSR2) 20 21 go func() { 22 // This runs forever, but blocks until the signal is received. 23 for { 24 <-signals 25 tokenBucketMu.Lock() 26 bwLimitToggledOff = !bwLimitToggledOff 27 tokenBucket, prevTokenBucket = prevTokenBucket, tokenBucket 28 s := "disabled" 29 if tokenBucket != nil { 30 s = "enabled" 31 } 32 tokenBucketMu.Unlock() 33 fs.Logf(nil, "Bandwidth limit %s by user", s) 34 } 35 }() 36 }