This repository was archived by the owner on Sep 11, 2020. It is now read-only.
This repository was archived by the owner on Sep 11, 2020. It is now read-only.
Race detected during PlainClone #351
Closed
Description
Go version: go version go1.8 darwin/amd64
go-git version: fresh install with go get gopkg.in/src-d/go-git.v4/...
I tested my code that calls PlainClone
with -race
option and race is detected.
This gist will demonstrate the issue.
Download the gist, replace TestSSHKey
with your own ssh key and run it with go test -race
will make the following error. Interesting thing is that race is not always detected depending on which repository to clone.
➜ go-git-race go test -race
Counting objects: 778, done.
Compressing objects: 100% (21/21), done.
==================
WARNING: DATA RACE
Read at 0x00c420239570 by goroutine 6:
sync/atomic.LoadInt64()
/usr/local/go/src/runtime/race_amd64.s:211 +0xb
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.(*syncedReader).Write.func1()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/writers.go:180 +0x7e
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.(*syncedReader).Write()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/writers.go:187 +0xe6
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.(*PackWriter).Write()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/writers.go:95 +0x70
io.copyBuffer()
/usr/local/go/src/io/io.go:392 +0x27d
io.Copy()
/usr/local/go/src/io/io.go:360 +0x7e
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.UpdateObjectStorage()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/common.go:33 +0x168
gopkg.in/src-d/go-git%2ev4.(*Remote).fetchPack()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/remote.go:226 +0x41e
gopkg.in/src-d/go-git%2ev4.(*Remote).fetch()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/remote.go:167 +0x58c
gopkg.in/src-d/go-git%2ev4.(*Repository).clone()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/repository.go:333 +0x3af
gopkg.in/src-d/go-git%2ev4.PlainClone()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/repository.go:227 +0xbd
_/Users/kimh/git/go-git-race.Clone()
/Users/kimh/git/go-git-race/clone_test.go:68 +0x43f
_/Users/kimh/git/go-git-race.TestClone()
/Users/kimh/git/go-git-race/clone_test.go:78 +0x33
testing.tRunner()
/usr/local/go/src/testing/testing.go:657 +0x107
Previous write at 0x00c420239570 by goroutine 17:
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.(*syncedReader).Seek()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/writers.go:239 +0x144
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*bufferedSeeker).Seek()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/scanner.go:380 +0x1ee
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*teeReader).Seek()
<autogenerated>:28 +0x7c
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Scanner).Seek()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/scanner.go:315 +0x118
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).DecodeObjectAt.func1()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:319 +0x5a
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).DecodeObjectAt()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:325 +0x141
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).recallByOffset()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:399 +0x223
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).fillOFSDeltaObjectContent()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:375 +0x3e9
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).decodeByHeader()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:279 +0x5ab
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).DecodeObject()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:214 +0xaa
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).decodeObjects()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:155 +0x4d
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).doDecode()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:145 +0x17c
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.(*Decoder).Decode()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/decoder.go:129 +0xd5
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.(*PackWriter).buildIndex()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/writers.go:64 +0x590
Goroutine 6 (running) created at:
testing.(*T).Run()
/usr/local/go/src/testing/testing.go:697 +0x543
testing.runTests.func1()
/usr/local/go/src/testing/testing.go:882 +0xaa
testing.tRunner()
/usr/local/go/src/testing/testing.go:657 +0x107
testing.runTests()
/usr/local/go/src/testing/testing.go:888 +0x4e0
testing.(*M).Run()
/usr/local/go/src/testing/testing.go:822 +0x1c3
main.main()
_/Users/kimh/git/go-git-race/_test/_testmain.go:42 +0x20f
Goroutine 17 (running) created at:
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.newPackWrite()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/writers.go:52 +0x507
gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit.(*DotGit).NewObjectPack()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/internal/dotgit/dotgit.go:111 +0x59
gopkg.in/src-d/go-git.v4/storage/filesystem.(*ObjectStorage).PackfileWriter()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/storage/filesystem/object.go:62 +0x50
gopkg.in/src-d/go-git.v4/storage/filesystem.(*Storage).PackfileWriter()
<autogenerated>:5 +0x58
gopkg.in/src-d/go-git.v4/plumbing/format/packfile.UpdateObjectStorage()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/plumbing/format/packfile/common.go:27 +0xc7
gopkg.in/src-d/go-git%2ev4.(*Remote).fetchPack()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/remote.go:226 +0x41e
gopkg.in/src-d/go-git%2ev4.(*Remote).fetch()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/remote.go:167 +0x58c
gopkg.in/src-d/go-git%2ev4.(*Repository).clone()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/repository.go:333 +0x3af
gopkg.in/src-d/go-git%2ev4.PlainClone()
/Users/kimh/golang/src/gopkg.in/src-d/go-git.v4/repository.go:227 +0xbd
_/Users/kimh/git/go-git-race.Clone()
/Users/kimh/git/go-git-race/clone_test.go:68 +0x43f
_/Users/kimh/git/go-git-race.TestClone()
/Users/kimh/git/go-git-race/clone_test.go:78 +0x33
testing.tRunner()
/usr/local/go/src/testing/testing.go:657 +0x107
==================
Total 778 (delta 12), reused 0 (delta 0), pack-reused 757
--- FAIL: TestClone (2.27s)
testing.go:610: race detected during execution of test
FAIL
exit status 1
FAIL _/Users/kimh/git/go-git-race 2.293s