1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package signal
6
7import (
8	"os"
9	"syscall"
10)
11
12var sigtab = make(map[os.Signal]int)
13
14// In sig.s; jumps to runtime.
15func signal_disable(uint32)
16func signal_enable(uint32)
17func signal_ignore(uint32)
18func signal_ignored(uint32) bool
19func signal_recv() string
20
21func init() {
22	signal_enable(0) // first call - initialize
23
24	watchSignalLoop = loop
25}
26
27func loop() {
28	for {
29		process(syscall.Note(signal_recv()))
30	}
31}
32
33const numSig = 256
34
35func signum(sig os.Signal) int {
36	switch sig := sig.(type) {
37	case syscall.Note:
38		n, ok := sigtab[sig]
39		if !ok {
40			n = len(sigtab) + 1
41			if n > numSig {
42				return -1
43			}
44			sigtab[sig] = n
45		}
46		return n
47	default:
48		return -1
49	}
50}
51
52func enableSignal(sig int) {
53	signal_enable(uint32(sig))
54}
55
56func disableSignal(sig int) {
57	signal_disable(uint32(sig))
58}
59
60func ignoreSignal(sig int) {
61	signal_ignore(uint32(sig))
62}
63
64func signalIgnored(sig int) bool {
65	return signal_ignored(uint32(sig))
66}
67