diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-05-06 09:23:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-06 09:23:04 -0400 |
commit | 8cc96bddc98621fd5e6b3a7f2a8263f39864bb71 (patch) | |
tree | 61f2eb0611e1f4971c30483bb6f9d97c4d81ea38 /pkg | |
parent | d6000a0b86fc835bca5cd28722ad75228a809629 (diff) | |
parent | 4fe9dc2fbc29fc57e819874635f09b3f837c0415 (diff) | |
download | podman-8cc96bddc98621fd5e6b3a7f2a8263f39864bb71.tar.gz podman-8cc96bddc98621fd5e6b3a7f2a8263f39864bb71.tar.bz2 podman-8cc96bddc98621fd5e6b3a7f2a8263f39864bb71.zip |
Merge pull request #10243 from giuseppe/simplify-channel
channel: simplify implementation
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/channel/writer.go | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/pkg/channel/writer.go b/pkg/channel/writer.go index 28c9d7de5..ecb68e906 100644 --- a/pkg/channel/writer.go +++ b/pkg/channel/writer.go @@ -1,7 +1,6 @@ package channel import ( - "fmt" "io" "sync" @@ -34,20 +33,17 @@ func (w *writeCloser) Chan() <-chan []byte { // Write method for WriteCloser func (w *writeCloser) Write(b []byte) (bLen int, err error) { - // https://github.com/containers/podman/issues/7896 - // when podman-remote pull image, if it was killed, the server will panic: send on closed channel - // so handle it - defer func() { - if rErr := recover(); rErr != nil { - err = fmt.Errorf("%s", rErr) - } - }() - if w == nil || w.ch == nil { + if w == nil { return 0, errors.New("use channel.NewWriter() to initialize a WriteCloser") } w.mux.Lock() defer w.mux.Unlock() + + if w.ch == nil { + return 0, errors.New("the channel is closed for Write") + } + buf := make([]byte, len(b)) copy(buf, b) w.ch <- buf @@ -57,6 +53,10 @@ func (w *writeCloser) Write(b []byte) (bLen int, err error) { // Close method for WriteCloser func (w *writeCloser) Close() error { + w.mux.Lock() + defer w.mux.Unlock() + close(w.ch) + w.ch = nil return nil } |