src-d / go-git

Project has been moved to: https://github.com/go-git/go-git
https://github.com/go-git/go-git
Apache License 2.0
4.9k stars 540 forks source link

plumbing: format/packfile, Fix data race and resource leak. #1159

Closed ebardsley closed 5 years ago

ebardsley commented 5 years ago

Two problems are fixed:

Running go test -race detected the following:

==================
WARNING: DATA RACE
Write at 0x00c000224020 by goroutine 15:
  bytes.(*Buffer).WriteByte()
      /usr/local/Cellar/go/1.11.5/libexec/src/bytes/buffer.go:271 +0xc8
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.diffDelta()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/diff_delta.go:95 +0x505
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.getDelta()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/diff_delta.go:60 +0x4ae
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).tryToDeltify()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:309 +0x398
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).walk()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:262 +0x33b
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).ObjectsToPack.func1()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:70 +0x6a

Previous read at 0x00c000224020 by goroutine 8:
  runtime.slicecopy()
      /usr/local/Cellar/go/1.11.5/libexec/src/runtime/slice.go:221 +0x0
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.getDelta()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/memory.go:53 +0x5e2
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).tryToDeltify()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:309 +0x398
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).walk()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:262 +0x33b
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).ObjectsToPack.func1()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:70 +0x6a

Goroutine 15 (running) created at:
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).ObjectsToPack()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:69 +0x761
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Encoder).Encode()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/encoder.go:52 +0xb1
  vendor/gopkg.in/src-d/go-git%2ev4.pushHashes.func1()
      vendor/gopkg.in/src-d/go-git.v4/remote.go:1026 +0x102

Goroutine 8 (finished) created at:
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*deltaSelector).ObjectsToPack()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/delta_selector.go:69 +0x761
  vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Encoder).Encode()
      vendor/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/encoder.go:52 +0xb1
  vendor/gopkg.in/src-d/go-git%2ev4.pushHashes.func1()
      vendor/gopkg.in/src-d/go-git.v4/remote.go:1026 +0x102
==================

Signed-off-by: Ed Bardsley ewb@uber.com