Skip to content

Data race with protoparse.Parser.ParseFiles #236

@bufdev

Description

@bufdev

There's some data race with protoparse.Parser.ParseFiles:

Note: I'm using two completely separately instantiated protoparse.Parsers, ie I'm not even using the same protoparse.Parser across threads, so it has to be something global.

Here's two traces. Both of these were done by compiling https://github.com/googleapis/googleapis on a per-directory basis, that is I call ParseFiles for the files in each directory using a separate protoparse.Parser on a separate thread.

Thoughts:

  • Maybe something to do with the globals, I don't know what but it has to do with modifying *DescriptorProto objects so maybe one of the caches? Assumedly this concerns imports since I'm not calling ParseFiles directly on the same file at any time.
  • Maybe something to do with the well-known types?
WARNING: DATA RACE
Read at 0x00c0077de7b0 by goroutine 151:
  github.com/jhump/protoreflect/desc.(*FieldDescriptor).resolve()
      /go/pkg/mod/github.com/golang/protobuf@v1.3.2/protoc-gen-go/descriptor/descriptor.pb.go:887 +0xb29
  github.com/jhump/protoreflect/desc.(*MessageDescriptor).resolve()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/descriptor.go:326 +0x73b
  github.com/jhump/protoreflect/desc.(*MessageDescriptor).resolve()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/descriptor.go:316 +0x38b
  github.com/jhump/protoreflect/desc.createFileDescriptor()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/convert.go:88 +0x1c3b
  github.com/jhump/protoreflect/desc/protoparse.(*linker).linkFile()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/convert.go:19 +0x647
  github.com/jhump/protoreflect/desc/protoparse.(*linker).linkFile()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:640 +0x514
  github.com/jhump/protoreflect/desc/protoparse.(*linker).createdLinkedDescriptors()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:602 +0x34e
  github.com/jhump/protoreflect/desc/protoparse.(*linker).linkFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:49 +0x98
  github.com/jhump/protoreflect/desc/protoparse.Parser.ParseFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/parser.go:183 +0x17d

Previous write at 0x00c0077de7b0 by goroutine 53:
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveFieldTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:381 +0xed5
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveMessageTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:303 +0x651
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveMessageTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:293 +0x3b1
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveReferences()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:239 +0x1af
  github.com/jhump/protoreflect/desc/protoparse.(*linker).linkFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:40 +0x74
  github.com/jhump/protoreflect/desc/protoparse.Parser.ParseFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/parser.go:183 +0x17d
WARNING: DATA RACE
Read at 0x00c00776e4e0 by goroutine 50:
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveFieldTypes()
      /go/pkg/mod/github.com/golang/protobuf@v1.3.2/protoc-gen-go/descriptor/descriptor.pb.go:887 +0x157b
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveMessageTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:303 +0x651
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveMessageTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:293 +0x3b1
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveReferences()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:239 +0x1af
  github.com/jhump/protoreflect/desc/protoparse.(*linker).linkFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:40 +0x74
  github.com/jhump/protoreflect/desc/protoparse.Parser.ParseFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/parser.go:183 +0x17d

Previous write at 0x00c00776e4e0 by goroutine 73:
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveFieldTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:381 +0xed5
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveMessageTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:303 +0x651
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveMessageTypes()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:293 +0x3b1
  github.com/jhump/protoreflect/desc/protoparse.(*linker).resolveReferences()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:239 +0x1af
  github.com/jhump/protoreflect/desc/protoparse.(*linker).linkFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/linker.go:40 +0x74
  github.com/jhump/protoreflect/desc/protoparse.Parser.ParseFiles()
      /go/pkg/mod/github.com/jhump/protoreflect@v1.4.5-0.20190717021903-efa672cbb5ff/desc/protoparse/parser.go:183 +0x17d

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions