summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-06-19 12:57:57 -0400
committerGitHub <noreply@github.com>2020-06-19 12:57:57 -0400
commited91524ae43d2729d60834596b4bba4bb78e4d8d (patch)
tree424c94487edd43d69dede090a886f77c658a08a3
parent1a2eb3e615fa05d77359295b870d7b3a0e4a5ed3 (diff)
parentbda4a6982f66107b4ca15ac815e86f2c121f9003 (diff)
downloadpodman-ed91524ae43d2729d60834596b4bba4bb78e4d8d.tar.gz
podman-ed91524ae43d2729d60834596b4bba4bb78e4d8d.tar.bz2
podman-ed91524ae43d2729d60834596b4bba4bb78e4d8d.zip
Merge pull request #6637 from jwhonce/issues/6574
Correct logic for demux'ing channels
-rw-r--r--pkg/bindings/containers/attach.go62
1 files changed, 34 insertions, 28 deletions
diff --git a/pkg/bindings/containers/attach.go b/pkg/bindings/containers/attach.go
index 44c7f4002..22ab2d72d 100644
--- a/pkg/bindings/containers/attach.go
+++ b/pkg/bindings/containers/attach.go
@@ -178,25 +178,28 @@ func Attach(ctx context.Context, nameOrID string, detachKeys *string, logs, stre
}
switch {
- case fd == 0 && isSet.stdout:
- _, err := stdout.Write(frame[0:l])
- if err != nil {
- return err
+ case fd == 0:
+ if isSet.stdout {
+ if _, err := stdout.Write(frame[0:l]); err != nil {
+ return err
+ }
}
- case fd == 1 && isSet.stdout:
- _, err := stdout.Write(frame[0:l])
- if err != nil {
- return err
+ case fd == 1:
+ if isSet.stdout {
+ if _, err := stdout.Write(frame[0:l]); err != nil {
+ return err
+ }
}
- case fd == 2 && isSet.stderr:
- _, err := stderr.Write(frame[0:l])
- if err != nil {
- return err
+ case fd == 2:
+ if isSet.stderr {
+ if _, err := stderr.Write(frame[0:l]); err != nil {
+ return err
+ }
}
case fd == 3:
return fmt.Errorf("error from service from stream: %s", frame)
default:
- return fmt.Errorf("unrecognized channel in header: %d, 0-3 supported", fd)
+ return fmt.Errorf("unrecognized channel '%d' in header, 0-3 supported", fd)
}
}
}
@@ -453,27 +456,30 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, streams *define.A
}
switch {
- case fd == 0 && streams.AttachOutput:
- _, err := streams.OutputStream.Write(frame[0:l])
- if err != nil {
- return err
+ case fd == 0:
+ if streams.AttachOutput {
+ if _, err := streams.OutputStream.Write(frame[0:l]); err != nil {
+ return err
+ }
}
- case fd == 1 && streams.AttachInput:
- // Write STDIN to STDOUT (echoing characters
- // typed by another attach session)
- _, err := streams.OutputStream.Write(frame[0:l])
- if err != nil {
- return err
+ case fd == 1:
+ if streams.AttachInput {
+ // Write STDIN to STDOUT (echoing characters
+ // typed by another attach session)
+ if _, err := streams.OutputStream.Write(frame[0:l]); err != nil {
+ return err
+ }
}
- case fd == 2 && streams.AttachError:
- _, err := streams.ErrorStream.Write(frame[0:l])
- if err != nil {
- return err
+ case fd == 2:
+ if streams.AttachError {
+ if _, err := streams.ErrorStream.Write(frame[0:l]); err != nil {
+ return err
+ }
}
case fd == 3:
return fmt.Errorf("error from service from stream: %s", frame)
default:
- return fmt.Errorf("unrecognized channel in header: %d, 0-3 supported", fd)
+ return fmt.Errorf("unrecognized channel '%d' in header, 0-3 supported", fd)
}
}
}