muka/go-bluetooth

data race at adapter.(*Adapter1).OnDeviceDiscovered

Opened this issue · 0 comments

ubuntu 22.04, arm64

Sometimes this runs into a datarace

func TestOnDiscoverDataRace(t *testing.T) {
	a, err := adapter.GetAdapter(adapter.GetDefaultAdapterID())
	if err != nil {
		t.Fatal(err)
	}

	if err = a.FlushDevices(); err != nil {
		t.Fatal(err)
	}

	err = a.StartDiscovery()
	if err != nil {
		t.Fatal(err)
	}

	ch, discoveryCancel, err := a.OnDeviceDiscovered()
	if err != nil {
		t.Fatal(err)
	}

	cancel := func() {
		err := a.StopDiscovery()
		if err != nil {
			slog.Warn("Error stopping discovery: %s", err)
		}
		discoveryCancel()
	}

	defer cancel()
	<-ch
}
Running tool: /snap/go/current/bin/go test -timeout 300s -run ^TestOnDiscoverDataRace$ vstcl/device -v -count=1 -race

=== RUN   TestOnDiscoverDataRace
==================
WARNING: DATA RACE
Write at 0x00c0000221f0 by goroutine 7:
  runtime.recvDirect()
      /snap/go/10611/src/runtime/chan.go:348 +0x7c
  github.com/muka/go-bluetooth/bluez/profile/adapter.(*Adapter1).OnDeviceDiscovered.func2()
      /home/rkanchan/go/pkg/mod/github.com/muka/go-bluetooth@v0.0.0-20240115085408-dfdf79b8f61d/bluez/profile/adapter/adapter_discovery.go:99 +0x5c
  vstcl/device.TestOnDiscoverDataRace.func1()
      /home/rkanchan/src/call-light/src/go-sdk/lib/device/device_test.go:707 +0xa0
  runtime.deferreturn()
      /snap/go/10611/src/runtime/panic.go:602 +0x5c
  testing.tRunner()
      /snap/go/10611/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /snap/go/10611/src/testing/testing.go:1742 +0x40

Previous read at 0x00c0000221f0 by goroutine 19:
  runtime.chansend1()
      /snap/go/10611/src/runtime/chan.go:146 +0x2c
  github.com/muka/go-bluetooth/bluez/profile/adapter.(*Adapter1).OnDeviceDiscovered.func1()
      /home/rkanchan/go/pkg/mod/github.com/muka/go-bluetooth@v0.0.0-20240115085408-dfdf79b8f61d/bluez/profile/adapter/adapter_discovery.go:89 +0x354

Goroutine 7 (running) created at:
  testing.(*T).Run()
      /snap/go/10611/src/testing/testing.go:1742 +0x5e4
  testing.runTests.func1()
      /snap/go/10611/src/testing/testing.go:2161 +0x80
  testing.tRunner()
      /snap/go/10611/src/testing/testing.go:1689 +0x180
  testing.runTests()
      /snap/go/10611/src/testing/testing.go:2159 +0x6e0
  testing.(*M).Run()
      /snap/go/10611/src/testing/testing.go:2027 +0xb74
  main.main()
      _testmain.go:69 +0x294

Goroutine 19 (running) created at:
  github.com/muka/go-bluetooth/bluez/profile/adapter.(*Adapter1).OnDeviceDiscovered()
      /home/rkanchan/go/pkg/mod/github.com/muka/go-bluetooth@v0.0.0-20240115085408-dfdf79b8f61d/bluez/profile/adapter/adapter_discovery.go:37 +0x134
  vstcl/device.TestOnDiscoverDataRace()
      /home/rkanchan/src/call-light/src/go-sdk/lib/device/device_test.go:697 +0x170
  testing.tRunner()
      /snap/go/10611/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /snap/go/10611/src/testing/testing.go:1742 +0x40
==================
==================
WARNING: DATA RACE
Write at 0x00c0000460b0 by goroutine 7:
  github.com/muka/go-bluetooth/bluez/profile/adapter.(*Adapter1).OnDeviceDiscovered.func2()
      /home/rkanchan/go/pkg/mod/github.com/muka/go-bluetooth@v0.0.0-20240115085408-dfdf79b8f61d/bluez/profile/adapter/adapter_discovery.go:101 +0x64
  vstcl/device.TestOnDiscoverDataRace.func1()
      /home/rkanchan/src/call-light/src/go-sdk/lib/device/device_test.go:707 +0xa0
  runtime.deferreturn()
      /snap/go/10611/src/runtime/panic.go:602 +0x5c
  testing.tRunner()
      /snap/go/10611/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /snap/go/10611/src/testing/testing.go:1742 +0x40

Previous read at 0x00c0000460b0 by goroutine 19:
  github.com/muka/go-bluetooth/bluez/profile/adapter.(*Adapter1).OnDeviceDiscovered.func1()
      /home/rkanchan/go/pkg/mod/github.com/muka/go-bluetooth@v0.0.0-20240115085408-dfdf79b8f61d/bluez/profile/adapter/adapter_discovery.go:85 +0x2cc

Goroutine 7 (running) created at:
  testing.(*T).Run()
      /snap/go/10611/src/testing/testing.go:1742 +0x5e4
  testing.runTests.func1()
      /snap/go/10611/src/testing/testing.go:2161 +0x80
  testing.tRunner()
      /snap/go/10611/src/testing/testing.go:1689 +0x180
  testing.runTests()
      /snap/go/10611/src/testing/testing.go:2159 +0x6e0
  testing.(*M).Run()
      /snap/go/10611/src/testing/testing.go:2027 +0xb74
  main.main()
      _testmain.go:69 +0x294

Goroutine 19 (running) created at:
  github.com/muka/go-bluetooth/bluez/profile/adapter.(*Adapter1).OnDeviceDiscovered()
      /home/rkanchan/go/pkg/mod/github.com/muka/go-bluetooth@v0.0.0-20240115085408-dfdf79b8f61d/bluez/profile/adapter/adapter_discovery.go:37 +0x134
  vstcl/device.TestOnDiscoverDataRace()
      /home/rkanchan/src/call-light/src/go-sdk/lib/device/device_test.go:697 +0x170
  testing.tRunner()
      /snap/go/10611/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /snap/go/10611/src/testing/testing.go:1742 +0x40
==================
    /home/rkanchan/src/call-light/src/go-sdk/lib/device/testing.go:1398: race detected during execution of test
--- FAIL: TestOnDiscoverDataRace (0.15s)
FAIL
FAIL	vstcl/device	0.161s