DockerCLI/cli/command
Sebastiaan van Stijn 9342ec6b71
ForwardAllSignals: check if channel is closed, and remove warning
Commit fff164c22e modified ForwardAllSignals to
take `SIGURG` signals into account, which can be generated by the Go runtime
on Go 1.14 and up as an interrupt to support pre-emptable system calls on Linux.

With the updated code, the signal (`s`) would sometimes be `nil`, causing spurious
(but otherwise harmless) warnings to be printed;

    Unsupported signal: <nil>. Discarding.

To debug this issue, I patched v20.10.4 to handle `nil`, and added a debug line
to print the signal in all cases;

```patch
diff --git a/cli/command/container/signals.go b/cli/command/container/signals.go
index 06e4d9eb6..0cb53ef06 100644
--- a/cli/command/container/signals.go
+++ b/cli/command/container/signals.go
@@ -22,8 +22,9 @@ func ForwardAllSignals(ctx context.Context, cli command.Cli, cid string, sigc <-
                case <-ctx.Done():
                        return
                }
+               fmt.Fprintf(cli.Err(), "Signal: %v\n", s)

               if s == signal.SIGCHLD || s == signal.SIGPIPE {
```

When running a cross-compiled macOS binary with Go 1.13 (`make -f docker.Makefile binary-osx`):

    # regular "docker run" (note that the `<nil>` signal only happens "sometimes"):
    ./build/docker run --rm alpine/git clone https://github.com/docker/getting-started.git
    Cloning into 'getting-started'...
    Signal: <nil>

    # when cancelling with CTRL-C:
    ./build/docker run --rm alpine/git clone https://github.com/docker/getting-started.git
    ^CSignal: interrupt
    Cloning into 'getting-started'...
    error: could not lock config file /git/getting-started/.git/config: No such file or directory
    fatal: could not set 'core.repositoryformatversion' to '0'
    Signal: <nil>
    Signal: <nil>

When running a macOS binary built with Go 1.15 (`DISABLE_WARN_OUTSIDE_CONTAINER=1 make binary`):

    # regular "docker run" (note that the `<nil>` signal only happens "sometimes"):
    # this is the same as on Go 1.13
    ./build/docker run --rm alpine/git clone https://github.com/docker/getting-started.git
    Cloning into 'getting-started'...
    Signal: <nil>

    # when cancelling with CTRL-C:
    ./build/docker run --rm alpine/git clone https://github.com/docker/getting-started.git
    Cloning into 'getting-started'...
    ^CSignal: interrupt
    Signal: urgent I/O condition
    Signal: urgent I/O condition
    fatal: --stdin requires a git repository
    fatal: index-pack failed
    Signal: <nil>
    Signal: <nil>

This patch checks if the channel is closed, and removes the warning (to prevent warnings if new
signals are added that are not in our known list of signals)

We should also consider updating `notfiyAllSignals()`, which currently forwards
_all_ signals (`signal.Notify(sigc)` without passing a list of signals), and
instead pass it "all signals _minus_ the signals we don't want forwarded":
35f023a7c2/cli/command/container/signals.go (L55)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-01 18:31:30 +01:00
..
builder Fix builder prune -a/--all flag description 2020-02-18 14:30:28 +01:00
checkpoint Replace deprecated Cobra command.SetOutput() with command.SetOut() 2020-05-07 14:25:59 +02:00
commands Remove "docker engine" subcommands 2019-12-12 17:51:25 +01:00
config formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
container ForwardAllSignals: check if channel is closed, and remove warning 2021-03-01 18:31:30 +01:00
context context: Ensure context name is valid on import 2021-02-02 13:51:15 +01:00
formatter formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
idresolver bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
image Use golang.org/x/sys/execabs 2021-01-26 17:18:04 +00:00
inspect bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
manifest Subcommand `docker manifest rm` 2020-09-15 16:26:47 -04:00
network formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
node formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
plugin formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
registry Fix panic when failing to get DefaultAuthConfig 2021-01-07 22:11:29 +01:00
secret formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
service service rollback: always verify state 2021-01-19 14:47:30 +01:00
stack Remove k8s.io/kubernetes dependency 2020-12-04 00:27:40 +01:00
swarm vendor: golang.org/x/crypto c1f2f97bffc9c53fc40a1a28a5b460094c0050d9 2020-12-02 21:01:12 +00:00
system Always enable experimental features 2020-10-02 15:59:42 +02:00
task formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
testdata Dynamically register kubernetes context store endpoint type. 2019-05-20 13:28:11 +01:00
trust formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
volume formatter: reduce minimum width for columns in table-view 2020-08-31 16:31:15 +02:00
cli.go Always enable experimental features 2020-10-02 15:59:42 +02:00
cli_options.go update docker, replace github.com/docker/pkg/term, github.com/docker/pkg/mount 2020-04-22 17:16:13 +02:00
cli_options_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
cli_test.go Always enable experimental features 2020-10-02 15:59:42 +02:00
context.go Don't loose additional metadata fields 2020-06-10 15:07:23 +02:00
context_test.go Don't loose additional metadata fields 2020-06-10 15:07:23 +02:00
defaultcontextstore.go Push check for kubernetes requirement down into the endpoint 2019-05-20 13:28:11 +01:00
defaultcontextstore_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
events_utils.go updated vendoring 2017-09-01 19:41:06 -04:00
orchestrator.go Fast Context Switch: commands 2019-01-10 22:25:43 +01:00
orchestrator_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
registry.go Fix panic when failing to get DefaultAuthConfig 2021-01-07 22:11:29 +01:00
registry_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
streams.go Extract streams helpers from command package to their own package to remove a cyclic dependency from command to internal/containerizedengine 2019-01-28 14:36:00 +01:00
trust.go Refactor content_trust cli/flags handling 2018-03-08 15:00:43 -05:00
utils.go build: remove PersistentPreRunE hack for experimental --platform 2020-11-16 14:58:11 +01:00
utils_test.go bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00