|
@@ -37,13 +37,13 @@ func (p *pipe) getState(forRead bool) error {
|
|
|
}
|
|
}
|
|
|
return nil
|
|
return nil
|
|
|
case closed:
|
|
case closed:
|
|
|
- if forRead {
|
|
|
|
|
- if !p.data.IsEmpty() {
|
|
|
|
|
- return nil
|
|
|
|
|
- }
|
|
|
|
|
- return io.EOF
|
|
|
|
|
|
|
+ if !forRead {
|
|
|
|
|
+ return io.ErrClosedPipe
|
|
|
}
|
|
}
|
|
|
- return io.ErrClosedPipe
|
|
|
|
|
|
|
+ if !p.data.IsEmpty() {
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+ return io.EOF
|
|
|
case errord:
|
|
case errord:
|
|
|
return io.ErrClosedPipe
|
|
return io.ErrClosedPipe
|
|
|
default:
|
|
default:
|
|
@@ -139,7 +139,9 @@ func (p *pipe) CloseError() {
|
|
|
p.Lock()
|
|
p.Lock()
|
|
|
defer p.Unlock()
|
|
defer p.Unlock()
|
|
|
|
|
|
|
|
- p.state = errord
|
|
|
|
|
|
|
+ if p.state == closed || p.state == errord {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if !p.data.IsEmpty() {
|
|
if !p.data.IsEmpty() {
|
|
|
p.data.Release()
|
|
p.data.Release()
|