From 55b70ecf3b0a75e47490bd2e2d98d5f18a8cb5af Mon Sep 17 00:00:00 2001 From: wnke Date: Mon, 10 May 2021 16:01:58 +0100 Subject: [PATCH 1/4] Update bufpipe_test.go Add test for close deadlock --- bufpipe_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bufpipe_test.go b/bufpipe_test.go index e433aad..0256c8f 100644 --- a/bufpipe_test.go +++ b/bufpipe_test.go @@ -128,3 +128,20 @@ func TestPipeReader_CloseWithError(t *testing.T) { is.Equal(err, expect) is.Equal(n, 0) } + +func TestPipeReader_WriterCloseNoDeadlock(t *testing.T) { + r, w := bufpipe.New(nil) + + done := make(chan struct{}) + go func(t *testing.T) { + buf := make([]byte, 800) + r.Read(buf) + done <- struct{}{} + }(t) + + time.Sleep(300 * time.Millisecond) + w.Close() + + <-done +} + From c3e518a77326bc60dc34a5ad9c4222c34f3f3d3a Mon Sep 17 00:00:00 2001 From: wnke Date: Mon, 10 May 2021 16:02:52 +0100 Subject: [PATCH 2/4] Update bufpipe.go Fix deadlock on close --- bufpipe.go | 1 + 1 file changed, 1 insertion(+) diff --git a/bufpipe.go b/bufpipe.go index 846dbcc..fd77abc 100644 --- a/bufpipe.go +++ b/bufpipe.go @@ -124,5 +124,6 @@ func (w *PipeWriter) CloseWithError(err error) error { err = io.EOF } w.rerr = err + w.cond.Signal() return nil } From 29700cc4d3e3f62ed25a5517f2bc9bface6e119c Mon Sep 17 00:00:00 2001 From: wnke Date: Mon, 10 May 2021 16:09:20 +0100 Subject: [PATCH 3/4] Update go.mod --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index bab097a..81b5886 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/acomagu/bufpipe +module github.com/wnke/bufpipe go 1.12 From d05316d79ede1d4c0b535bd740451a1c97e114cc Mon Sep 17 00:00:00 2001 From: Joao Silva Date: Fri, 4 Jun 2021 22:34:22 +0100 Subject: [PATCH 4/4] Fix module. Update signal to broadcast --- bufpipe.go | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bufpipe.go b/bufpipe.go index fd77abc..34882ea 100644 --- a/bufpipe.go +++ b/bufpipe.go @@ -124,6 +124,6 @@ func (w *PipeWriter) CloseWithError(err error) error { err = io.EOF } w.rerr = err - w.cond.Signal() + w.cond.Broadcast() return nil } diff --git a/go.mod b/go.mod index 81b5886..bab097a 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/wnke/bufpipe +module github.com/acomagu/bufpipe go 1.12