Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data race with concurrent use of one or more patterns #125

Closed
rgmz opened this issue Jul 2, 2024 · 2 comments · Fixed by #127
Closed

Data race with concurrent use of one or more patterns #125

rgmz opened this issue Jul 2, 2024 · 2 comments · Fixed by #127

Comments

@rgmz
Copy link

rgmz commented Jul 2, 2024

I stumbled across a data race that appears to happen when you try to perform concurrent actions against one (or more) patterns.

It's unclear whether this stems from this library or https://github.com/tetratelabs/wazero as I see read/write warnings for both. Normally I'd try to provide helpful speculation about the cause, however, this goes a bit over my head.

Data race warnings (click her to expand)
==================
WARNING: DATA RACE
Read at 0x00c000012a20 by goroutine 28:
  github.com/wasilibs/go-re2/internal/alloc.(*mmappedMemory).Reallocate()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/alloc/alloc_unix.go:74 +0x31
  github.com/tetratelabs/wazero/internal/wasm.(*MemoryInstance).Grow()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/wasm/memory.go:236 +0x112
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:309 +0x904
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Previous write at 0x00c000012a20 by goroutine 39:
  github.com/wasilibs/go-re2/internal/alloc.(*mmappedMemory).Reallocate()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/alloc/alloc_unix.go:88 +0x110
  github.com/tetratelabs/wazero/internal/wasm.(*MemoryInstance).Grow()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/wasm/memory.go:236 +0x112
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:309 +0x904
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Goroutine 28 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56

Goroutine 39 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56
==================
==================
WARNING: DATA RACE
Write at 0x00c0000e81dc by goroutine 28:
  github.com/tetratelabs/wazero/internal/wasm.(*MemoryInstance).Grow()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/wasm/memory.go:245 +0x1ee
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:309 +0x904
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Previous write at 0x00c0000e81dc by goroutine 39:
  github.com/tetratelabs/wazero/internal/wasm.(*MemoryInstance).Grow()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/wasm/memory.go:245 +0x1ee
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:309 +0x904
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Goroutine 28 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56

Goroutine 39 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56
==================
==================
WARNING: DATA RACE
Read at 0x00c00001a21f by goroutine 28:
  encoding/binary.littleEndian.PutUint64()
      /home/user/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.2.linux-amd64/src/encoding/binary/binary.go:112 +0xe06
  github.com/tetratelabs/wazero/internal/engine/wazevo.putLocalMemory()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/module_engine.go:95 +0xd93
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:320 +0xd44
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Previous write at 0x00c00001a21f by goroutine 39:
  encoding/binary.littleEndian.PutUint64()
      /home/user/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.2.linux-amd64/src/encoding/binary/binary.go:120 +0xf4b
  github.com/tetratelabs/wazero/internal/engine/wazevo.putLocalMemory()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/module_engine.go:95 +0xd93
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:320 +0xd44
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Goroutine 28 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56

Goroutine 39 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56
==================
==================
WARNING: DATA RACE
Read at 0x00c00001a227 by goroutine 28:
  encoding/binary.littleEndian.PutUint64()
      /home/user/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.2.linux-amd64/src/encoding/binary/binary.go:112 +0xfce
  github.com/tetratelabs/wazero/internal/engine/wazevo.putLocalMemory()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/module_engine.go:96 +0xf6c
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:320 +0xd44
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Previous write at 0x00c00001a227 by goroutine 39:
  encoding/binary.littleEndian.PutUint64()
      /home/user/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.2.linux-amd64/src/encoding/binary/binary.go:120 +0x1112
  github.com/tetratelabs/wazero/internal/engine/wazevo.putLocalMemory()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/module_engine.go:96 +0xf6c
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).callWithStack()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:320 +0xd44
  github.com/tetratelabs/wazero/internal/engine/wazevo.(*callEngine).Call()
      /home/user/go/pkg/mod/github.com/tetratelabs/wazero@v1.7.2/internal/engine/wazevo/call_engine.go:142 +0x175
  github.com/wasilibs/go-re2/internal.createChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:96 +0x135
  github.com/wasilibs/go-re2/internal.getChildModule()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:143 +0x345
  github.com/wasilibs/go-re2/internal.(*lazyFunction).callWithStack()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:596 +0x6d
  github.com/wasilibs/go-re2/internal.(*lazyFunction).Call1()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:564 +0x84
  github.com/wasilibs/go-re2/internal.malloc()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:463 +0x4a
  github.com/wasilibs/go-re2/internal.(*libre2ABI).reserve()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:484 +0xd6
  github.com/wasilibs/go-re2/internal.(*libre2ABI).startOperation()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2_wazero.go:235 +0xc6
  github.com/wasilibs/go-re2/internal.(*Regexp).FindAllStringSubmatch()
      /home/user/go/pkg/mod/github.com/wasilibs/go-re2@v1.6.0/internal/re2.go:451 +0x5f
  main.main.func1()
      /tmp/testproject/main.go:22 +0x67

Goroutine 28 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56

Goroutine 39 (running) created at:
  main.main()
      /tmp/testproject/main.go:21 +0x56
==================
Found 4 data race(s)

System info

Windows 10, build 19045

$ uname -r
5.15.146.1-microsoft-standard-WSL2
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

Steps to reproduce

  1. Create a Go project with the following reproducer
    // main.go
    package main
    
    import (
        "sync"
    
        regexp "github.com/wasilibs/go-re2"
    )
    
    var (
            // Neither the pattern nor text *seems* relevant for causing this.
        ipsumPat = regexp.MustCompile("(?i)\b([i1]psum)\b")
        text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    )
    
    func main() {
        var wg sync.WaitGroup
    
        for i := 0; i < 25; i++ {
    	    wg.Add(1)
    	    go func() {
    		    _ = ipsumPat.FindAllStringSubmatch(text, -1) // Do nothing with matches.
    		    wg.Done()
    	    }()
        }
    
        wg.Wait()
    }
  2. Build the project with -race and run it
    $ go build -race && ./reproducer
  3. Observe data race warnings
@anuraaga
Copy link
Collaborator

anuraaga commented Jul 3, 2024

Hi @rgmz - thanks for the report. Wasm is tricky in that even if it correctly locks within the compiled code, the Go race detector doesn't know about it and can produce warnings as a result. But either way probably Go apps do need to be able to pass with the race detector when using wazero. One race was within this library code which I fixed in #126 but the others seem to be within wazero. I filed tetratelabs/wazero#2278 to see if we can work around it. Sorry for the trouble.

@rgmz
Copy link
Author

rgmz commented Jul 5, 2024

No trouble at all! Thank you for taking a look at this. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants