summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2021-05-06 09:23:04 -0400
committerGitHub <noreply@github.com>2021-05-06 09:23:04 -0400
commit8cc96bddc98621fd5e6b3a7f2a8263f39864bb71 (patch)
tree61f2eb0611e1f4971c30483bb6f9d97c4d81ea38
parentd6000a0b86fc835bca5cd28722ad75228a809629 (diff)
parent4fe9dc2fbc29fc57e819874635f09b3f837c0415 (diff)
downloadpodman-8cc96bddc98621fd5e6b3a7f2a8263f39864bb71.tar.gz
podman-8cc96bddc98621fd5e6b3a7f2a8263f39864bb71.tar.bz2
podman-8cc96bddc98621fd5e6b3a7f2a8263f39864bb71.zip
Merge pull request #10243 from giuseppe/simplify-channel
channel: simplify implementation
-rw-r--r--pkg/channel/writer.go20
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
}