Files
wehub-resource-sync 1b8708893a
Security Scan / tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:12:26 +08:00

42 lines
667 B
Go

package signals
import (
"os"
"os/signal"
"sync"
"syscall"
)
var (
signalHandlers []func()
signalHandlersMutex sync.Mutex
)
var setupSignalHandler = sync.OnceFunc(func() {
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
go signalHandler(c)
})
func RegisterGracefulTerminationHandler(fn func()) {
signalHandlersMutex.Lock()
defer signalHandlersMutex.Unlock()
signalHandlers = append(signalHandlers, fn)
}
func init() {
setupSignalHandler()
}
func signalHandler(c chan os.Signal) {
<-c
signalHandlersMutex.Lock()
defer signalHandlersMutex.Unlock()
for _, fn := range signalHandlers {
fn()
}
os.Exit(0)
}