diff options
author | Javi Fontan <jfontan@gmail.com> | 2019-03-01 15:33:49 +0100 |
---|---|---|
committer | Javi Fontan <jfontan@gmail.com> | 2019-03-01 15:33:49 +0100 |
commit | fae29fbd5895363ef5464cc12029db85a1a24529 (patch) | |
tree | 451661799b2619458b36359a79c7ee58f5d8a715 /remote_test.go | |
parent | 0106daba16494c33d330168e38c8a610b7a9b32c (diff) | |
download | go-git-fae29fbd5895363ef5464cc12029db85a1a24529.tar.gz |
git: fix goroutine block while pushing a remote
On session.ReceivePack error the gororutine doing the encoding got
blocked either writing objects to the pipe or sending error to the done
channel. The problem did not cause a perceived problem but left blocked
goroutines.
Signed-off-by: Javi Fontan <jfontan@gmail.com>
Diffstat (limited to 'remote_test.go')
-rw-r--r-- | remote_test.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/remote_test.go b/remote_test.go index 28b0a3a..58a0598 100644 --- a/remote_test.go +++ b/remote_test.go @@ -6,6 +6,8 @@ import ( "io" "io/ioutil" "os" + "runtime" + "time" "gopkg.in/src-d/go-git.v4/config" "gopkg.in/src-d/go-git.v4/plumbing" @@ -448,10 +450,17 @@ func (s *RemoteSuite) TestPushContext(c *C) { ctx, cancel := context.WithCancel(context.Background()) cancel() + numGoroutines := runtime.NumGoroutine() + err = r.PushContext(ctx, &PushOptions{ RefSpecs: []config.RefSpec{"refs/tags/*:refs/tags/*"}, }) c.Assert(err, NotNil) + + // let the goroutine from pushHashes finish and check that the number of + // goroutines is the same as before + time.Sleep(100 * time.Millisecond) + c.Assert(runtime.NumGoroutine(), Equals, numGoroutines) } func (s *RemoteSuite) TestPushTags(c *C) { |