ui/progress: extract signal handling into own package

This commit is contained in:
Michael Eischer
2020-12-29 15:20:30 +01:00
parent 023eea6463
commit 34afc93ddc
5 changed files with 30 additions and 17 deletions

View File

@@ -0,0 +1,24 @@
package signals
import (
"os"
"sync"
)
// GetProgressChannel returns a channel with which a single listener
// receives each incoming signal.
func GetProgressChannel() <-chan os.Signal {
signals.Once.Do(func() {
signals.ch = make(chan os.Signal, 1)
setupSignals()
})
return signals.ch
}
// XXX The fact that signals is a single global variable means that only one
// listener receives each incoming signal.
var signals struct {
ch chan os.Signal
sync.Once
}

View File

@@ -0,0 +1,12 @@
// +build darwin dragonfly freebsd netbsd openbsd
package signals
import (
"os/signal"
"syscall"
)
func setupSignals() {
signal.Notify(signals.ch, syscall.SIGINFO, syscall.SIGUSR1)
}

View File

@@ -0,0 +1,12 @@
// +build aix linux solaris
package signals
import (
"os/signal"
"syscall"
)
func setupSignals() {
signal.Notify(signals.ch, syscall.SIGUSR1)
}

View File

@@ -0,0 +1,3 @@
package signals
func setupSignals() {}