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  }