os/signal: add Stop, be careful about SIGHUP

Fixes #4268.
Fixes #4491.

R=golang-dev, nightlyone, fullung, r
CC=golang-dev
https://golang.org/cl/7546048
This commit is contained in:
Russ Cox 2013-03-15 00:00:02 -04:00
parent 392d5feb8b
commit cb4428e555
12 changed files with 289 additions and 47 deletions

View file

@ -12,6 +12,7 @@ import (
)
// In assembly.
func signal_disable(uint32)
func signal_enable(uint32)
func signal_recv() uint32
@ -26,13 +27,27 @@ func init() {
go loop()
}
func enableSignal(sig os.Signal) {
const (
numSig = 65 // max across all systems
)
func signum(sig os.Signal) int {
switch sig := sig.(type) {
case nil:
signal_enable(^uint32(0))
case syscall.Signal:
signal_enable(uint32(sig))
i := int(sig)
if i < 0 || i >= numSig {
return -1
}
return i
default:
// Can ignore: this signal (whatever it is) will never come in.
return -1
}
}
func enableSignal(sig int) {
signal_enable(uint32(sig))
}
func disableSignal(sig int) {
signal_disable(uint32(sig))
}