]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix unbuffered channel passed to signal.Notify
authorCuong Manh Le <cuong@orijtech.com>
Tue, 1 Dec 2020 05:54:24 +0000 (12:54 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Wed, 2 Dec 2020 16:43:58 +0000 (16:43 +0000)
Unbuffered channels passed into signal.Notify can be lost
as the docs for signal.Notify caution with:

    Package signal will not block sending to c: the caller must ensure
    that c has sufficient buffer space to keep up with the expected signal
    rate. For a channel used for notification of just one signal value,
    a buffer of size 1 is sufficient.

Found by a static analyzer from Orijtech, Inc. called "sigchanyzer", but
it'll be donated to the Go project soon.

Updates #9399.

Change-Id: Ia0690e447582da028694ed65ace7b97961997b84
Reviewed-on: https://go-review.googlesource.com/c/go/+/274332
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/go/internal/base/signal.go

index 54d11876d07aeeeba70bc2cac70d5f96b14ca8ed..05befcf7f0c8eb84b07d9aee3b3f489fe04d6be3 100644 (file)
@@ -15,7 +15,7 @@ var Interrupted = make(chan struct{})
 
 // processSignals setups signal handler.
 func processSignals() {
-       sig := make(chan os.Signal)
+       sig := make(chan os.Signal, 1)
        signal.Notify(sig, signalsToIgnore...)
        go func() {
                <-sig