47 lines
1.4 KiB
Diff
47 lines
1.4 KiB
Diff
From dcfe23a0381da232eb427f8616abd8949fb9693e Mon Sep 17 00:00:00 2001
|
|
From: ningmingxiao <ning.mingxiao@zte.com.cn>
|
|
Date: Thu, 30 Dec 2021 23:10:48 +0800
|
|
Subject: [PATCH] fix blockThreshold full bug
|
|
|
|
Signed-off-by: ningmingxiao <ning.mingxiao@zte.com.cn>
|
|
|
|
---
|
|
components/engine/pkg/ioutils/bytespipe.go | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
diff --git a/components/engine/pkg/ioutils/bytespipe.go b/components/engine/pkg/ioutils/bytespipe.go
|
|
index d4bbf3c9..e04a5bf5 100644
|
|
--- a/components/engine/pkg/ioutils/bytespipe.go
|
|
+++ b/components/engine/pkg/ioutils/bytespipe.go
|
|
@@ -34,6 +34,7 @@ type BytesPipe struct {
|
|
buf []*fixedBuffer
|
|
bufLen int
|
|
closeErr error // error to return from next Read. set to nil if not closed.
|
|
+ readBlock bool // check read BytesPipe is Wait() or not
|
|
}
|
|
|
|
// NewBytesPipe creates new BytesPipe, initialized by specified slice.
|
|
@@ -86,6 +87,9 @@ loop0:
|
|
|
|
// make sure the buffer doesn't grow too big from this write
|
|
for bp.bufLen >= blockThreshold {
|
|
+ if bp.readBlock {
|
|
+ bp.wait.Broadcast()
|
|
+ }
|
|
bp.wait.Wait()
|
|
if bp.closeErr != nil {
|
|
continue loop0
|
|
@@ -131,7 +135,9 @@ func (bp *BytesPipe) Read(p []byte) (n int, err error) {
|
|
bp.mu.Unlock()
|
|
return 0, bp.closeErr
|
|
}
|
|
+ bp.readBlock = true
|
|
bp.wait.Wait()
|
|
+ bp.readBlock = false
|
|
if bp.bufLen == 0 && bp.closeErr != nil {
|
|
err := bp.closeErr
|
|
bp.mu.Unlock()
|
|
--
|
|
2.23.0
|
|
|