Skip to content

Possible data race in the logger? #1487

@zhengshi1998

Description

@zhengshi1998

I'm using the v1.9.7 - 2024-11-11 release.

After I run the command go build -race && ./go2rtc to build go2rtc together with race detector, some race reports are printed.

17:38:13.843 INF go2rtc platform=linux/amd64 revision=mod.aa12ae0 version=1.9.7
17:38:13.843 INF config path=/home/shizheng/go-benchmarks/go2rtc-1.9.7/go2rtc.yaml
17:38:13.844 ERR [rtsp] listen error=listen tcp :8554: bind: address already in use
17:38:13.844 INF [webrtc] listen addr=:8555/tcp
17:38:13.846 ERR [api] listen error=listen tcp :1984: bind: address already in use
==================
WARNING: DATA RACE
Read at 0x00c000002180 by goroutine 7:
  github.com/AlexxIT/go2rtc/internal/app.(*circularBuffer).Write()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/internal/app/log.go:120 +0x92
  github.com/rs/zerolog.LevelWriterAdapter.WriteLevel()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/writer.go:27 +0x6f
  github.com/rs/zerolog.(*LevelWriterAdapter).WriteLevel()
      <autogenerated>:1 +0x1f
  github.com/rs/zerolog.multiLevelWriter.WriteLevel()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/writer.go:98 +0xe9
  github.com/rs/zerolog.(*multiLevelWriter).WriteLevel()
      <autogenerated>:1 +0x84
  github.com/rs/zerolog.(*Event).write()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/event.go:80 +0x2b2
  github.com/rs/zerolog.(*Event).msg()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/event.go:151 +0x439
  github.com/rs/zerolog.(*Event).Msg()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/event.go:110 +0xba
  github.com/AlexxIT/go2rtc/internal/api.listen()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/internal/api/api.go:89 +0x91
  github.com/AlexxIT/go2rtc/internal/api.Init.gowrap1()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/internal/api/api.go:72 +0x4d

Previous write at 0x00c000002180 by main goroutine:
  github.com/AlexxIT/go2rtc/internal/app.(*circularBuffer).Write()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/internal/app/log.go:142 +0x525
  github.com/rs/zerolog.LevelWriterAdapter.WriteLevel()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/writer.go:27 +0x6f
  github.com/rs/zerolog.(*LevelWriterAdapter).WriteLevel()
      <autogenerated>:1 +0x1f
  github.com/rs/zerolog.multiLevelWriter.WriteLevel()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/writer.go:98 +0xe9
  github.com/rs/zerolog.(*multiLevelWriter).WriteLevel()
      <autogenerated>:1 +0x84
  github.com/rs/zerolog.(*Event).write()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/event.go:80 +0x2b2
  github.com/rs/zerolog.(*Event).msg()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/event.go:151 +0x439
  github.com/rs/zerolog.(*Event).Msg()
      /home/shizheng/golang/pkg/mod/github.com/rs/[email protected]/event.go:110 +0x5da
  github.com/AlexxIT/go2rtc/internal/webrtc.Init()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/internal/webrtc/webrtc.go:56 +0x58e
  main.main()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/main.go:53 +0x78

Goroutine 7 (running) created at:
  github.com/AlexxIT/go2rtc/internal/api.Init()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/internal/api/api.go:72 +0x8d1
  main.main()
      /home/shizheng/go-benchmarks/go2rtc-1.9.7/main.go:45 +0x64
==================

Looks like this is caused by the logger under go2rtc/internal/app/log.go. The func (b *circularBuffer) Write(p []byte) (n int, err error) method is not protected by mutex, so that during initialization phase, when multiple goroutines try to write to the buffer concurrently, data races could appear.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions