os/signal, runtime: remove runtime sigqueue initialization

We can initialize the runtime sigqueue packages on first use.
We don't require an explicit initialization step. So, remove it.

Change-Id: I484e02dc2c67395fd5584f35ecda2e28b37168df
Reviewed-on: https://go-review.googlesource.com/c/go/+/226540
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
Ian Lance Taylor 2020-03-31 10:49:31 -07:00
parent 620208790e
commit 2681efaf0e
5 changed files with 13 additions and 21 deletions

View file

@ -122,12 +122,6 @@ func Notify(c chan<- os.Signal, sig ...os.Signal) {
panic("os/signal: Notify using nil channel")
}
watchSignalLoopOnce.Do(func() {
if watchSignalLoop != nil {
go watchSignalLoop()
}
})
handlers.Lock()
defer handlers.Unlock()
@ -148,6 +142,14 @@ func Notify(c chan<- os.Signal, sig ...os.Signal) {
h.set(n)
if handlers.ref[n] == 0 {
enableSignal(n)
// The runtime requires that we enable a
// signal before starting the watcher.
watchSignalLoopOnce.Do(func() {
if watchSignalLoop != nil {
go watchSignalLoop()
}
})
}
handlers.ref[n]++
}

View file

@ -11,7 +11,7 @@ import (
var sigtab = make(map[os.Signal]int)
// In sig.s; jumps to runtime.
// Defined by the runtime package.
func signal_disable(uint32)
func signal_enable(uint32)
func signal_ignore(uint32)
@ -19,8 +19,6 @@ func signal_ignored(uint32) bool
func signal_recv() string
func init() {
signal_enable(0) // first call - initialize
watchSignalLoop = loop
}

View file

@ -25,8 +25,6 @@ func loop() {
}
func init() {
signal_enable(0) // first call - initialize
watchSignalLoop = loop
}

View file

@ -192,16 +192,13 @@ func signalWaitUntilIdle() {
//go:linkname signal_enable os/signal.signal_enable
func signal_enable(s uint32) {
if !sig.inuse {
// The first call to signal_enable is for us
// to use for initialization. It does not pass
// signal information in m.
// This is the first call to signal_enable. Initialize.
sig.inuse = true // enable reception of signals; cannot disable
if GOOS == "darwin" {
sigNoteSetup(&sig.note)
return
} else {
noteclear(&sig.note)
}
noteclear(&sig.note)
return
}
if s >= uint32(len(sig.wanted)*32) {

View file

@ -134,12 +134,9 @@ func signalWaitUntilIdle() {
//go:linkname signal_enable os/signal.signal_enable
func signal_enable(s uint32) {
if !sig.inuse {
// The first call to signal_enable is for us
// to use for initialization. It does not pass
// signal information in m.
// This is the first call to signal_enable. Initialize.
sig.inuse = true // enable reception of signals; cannot disable
noteclear(&sig.note)
return
}
}