mirror of
https://github.com/restic/restic.git
synced 2025-12-03 21:51:47 +00:00
ui/progress: extract signal handling into own package
This commit is contained in:
24
internal/ui/signals/signals.go
Normal file
24
internal/ui/signals/signals.go
Normal 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
|
||||
}
|
||||
12
internal/ui/signals/signals_bsd.go
Normal file
12
internal/ui/signals/signals_bsd.go
Normal 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)
|
||||
}
|
||||
12
internal/ui/signals/signals_sysv.go
Normal file
12
internal/ui/signals/signals_sysv.go
Normal file
@@ -0,0 +1,12 @@
|
||||
// +build aix linux solaris
|
||||
|
||||
package signals
|
||||
|
||||
import (
|
||||
"os/signal"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func setupSignals() {
|
||||
signal.Notify(signals.ch, syscall.SIGUSR1)
|
||||
}
|
||||
3
internal/ui/signals/signals_windows.go
Normal file
3
internal/ui/signals/signals_windows.go
Normal file
@@ -0,0 +1,3 @@
|
||||
package signals
|
||||
|
||||
func setupSignals() {}
|
||||
Reference in New Issue
Block a user