From 700a71e6b62a3786d11719ae30cacd0f90930525 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 29 Oct 2013 11:59:08 -0700 Subject: [PATCH] stop proxy at one point --- commands.go | 12 ++++++++---- utils/signal.go | 11 +++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 utils/signal.go diff --git a/commands.go b/commands.go index 94528273ec..4a7c4b8d23 100644 --- a/commands.go +++ b/commands.go @@ -540,7 +540,7 @@ func (cli *DockerCli) CmdRestart(args ...string) error { return nil } -func (cli *DockerCli) forwardAllSignals(cid string) { +func (cli *DockerCli) forwardAllSignals(cid string) chan os.Signal { sigc := make(chan os.Signal, 1) utils.CatchAll(sigc) go func() { @@ -550,6 +550,7 @@ func (cli *DockerCli) forwardAllSignals(cid string) { } } }() + return sigc } func (cli *DockerCli) CmdStart(args ...string) error { @@ -582,7 +583,8 @@ func (cli *DockerCli) CmdStart(args ...string) error { } if !container.Config.Tty { - cli.forwardAllSignals(cmd.Arg(0)) + sigc := cli.forwardAllSignals(cmd.Arg(0)) + defer utils.StopCatch(sigc) } if container.Config.Tty && cli.isTerminal { @@ -1366,7 +1368,8 @@ func (cli *DockerCli) CmdAttach(args ...string) error { v.Set("stderr", "1") if *proxy && !container.Config.Tty { - cli.forwardAllSignals(cmd.Arg(0)) + sigc := cli.forwardAllSignals(cmd.Arg(0)) + defer utils.StopCatch(sigc) } if err := cli.hijack("POST", "/containers/"+cmd.Arg(0)+"/attach?"+v.Encode(), container.Config.Tty, in, cli.out, cli.err, nil); err != nil { @@ -1611,7 +1614,8 @@ func (cli *DockerCli) CmdRun(args ...string) error { } if sigProxy { - cli.forwardAllSignals(runResult.ID) + sigc := cli.forwardAllSignals(runResult.ID) + defer utils.StopCatch(sigc) } var ( diff --git a/utils/signal.go b/utils/signal.go new file mode 100644 index 0000000000..0cac7d113f --- /dev/null +++ b/utils/signal.go @@ -0,0 +1,11 @@ +package utils + +import ( + "os" + "os/signal" +) + +func StopCatch(sigc chan os.Signal) { + signal.Stop(sigc) + close(sigc) +}