grafana / xk6-browser

The browser module adds support for browser automation and end-to-end web testing via the Chrome Devtools Protocol to k6.
https://grafana.com/docs/k6/latest/javascript-api/k6-browser/
GNU Affero General Public License v3.0
344 stars 41 forks source link

Concurrent map iteration and write bugs #1375

Open inancgumus opened 5 months ago

inancgumus commented 5 months ago

What?

Fix the concurrent map iteration and write panics.

Why?

To prevent the panics.

Case 1

Test run ID: 2760298 (Browser version: 1.5.1) and 3412683, 3414418 (Browser version: 1.8.5) ``` fatal error: concurrent map iteration and map write goroutine 94 [running]: reflect.mapiternext(0x4b6aa9?) runtime/map.go:1392 +0x13 reflect.(*MapIter).Next(0xc018d88680?) reflect/value.go:2005 +0x74 internal/fmtsort.Sort({0x15a7760?, 0xc002cd2b60?, 0xc0012d1690?}) internal/fmtsort/sort.go:62 +0x1d3 fmt.(*pp).printValue(0xc000f94000, {0x15a7760?, 0xc002cd2b60?, 0x1?}, 0x76, 0x3) fmt/print.go:816 +0x988 fmt.(*pp).printValue(0xc000f94000, {0x16f8d20?, 0xc002cd2b40?, 0xc018d88b28?}, 0x76, 0x2) fmt/print.go:853 +0x11be fmt.(*pp).printValue(0xc000f94000, {0x1750940?, 0xc002cd2b40?, 0xc01ae76000?}, 0x76, 0x1) fmt/print.go:853 +0x11be fmt.(*pp).printValue(0xc000f94000, {0x173a740?, 0xc002cd2b40?, 0x0?}, 0x76, 0x0) fmt/print.go:921 +0xaf4 fmt.(*pp).badVerb(0xc000f94000, 0x71) fmt/print.go:394 +0x47f fmt.(*pp).fmtPointer(0xc000f94000, {0x173a740?, 0xc002cd2b40?, 0x50aa70?}, 0x71) fmt/print.go:583 +0x414 fmt.(*pp).printValue(0xc000f94000, {0x173a740?, 0xc002cd2b40?, 0x50aa70?}, 0x71, 0x3) fmt/print.go:927 +0x1165 fmt.(*pp).printValue(0xc000f94000, {0x17135e0?, 0xc014fefb80?, 0x0?}, 0x71, 0x2) fmt/print.go:853 +0x11be fmt.(*pp).printValue(0xc000f94000, {0x1646fa0?, 0xc014fefb80?, 0x50aa70?}, 0x71, 0x1) fmt/print.go:853 +0x11be fmt.(*pp).printValue(0xc000f94000, {0x17cb4c0?, 0xc014fefb80?, 0xc018d89970?}, 0x71, 0x0) fmt/print.go:921 +0xaf4 fmt.(*pp).printArg(0xc000f94000, {0x17cb4c0, 0xc014fefb80}, 0x71) fmt/print.go:759 +0x4bc fmt.(*pp).doPrintf(0xc000f94000, {0x184d1e5, 0x45}, {0xc018d89de0, 0x4, 0x4}) fmt/print.go:1075 +0x37e fmt.Errorf({0x184d1e5, 0x45}, {0xc018d89de0, 0x4, 0x4}) fmt/errors.go:25 +0x85 github.com/grafana/xk6-browser/common.(*ExecutionContext).eval(0xc018c3cfd0, {0x1bb8208, 0xc000ece730}, {0x1, 0x0}, {0x185895c, 0xa5}, {0xc0194d8a20, 0x6, 0x6}) github.com/grafana/xk6-browser@v1.5.1/common/execution_context.go:189 +0xd65 github.com/grafana/xk6-browser/common.(*ElementHandle).eval(...) github.com/grafana/xk6-browser@v1.5.1/common/element_handle.go:1401 github.com/grafana/xk6-browser/common.(*ElementHandle).evalWithScript(0xc014fefb80, {0x1bb8208, 0xc000ece730}, {0x0?, 0x0?}, {0x185895c, 0xa5}, {0xc018d89f40, 0x4, 0x4}) github.com/grafana/xk6-browser@v1.5.1/common/element_handle.go:1392 +0x25d github.com/grafana/xk6-browser/common.(*ElementHandle).waitForSelector(0xc014fefb80, {0x1bb8208, 0xc000ece730}, {0xc00258e3a8?, 0x1808d81?}, 0xc018d8a158) github.com/grafana/xk6-browser@v1.5.1/common/element_handle.go:681 +0x188 github.com/grafana/xk6-browser/common.(*Frame).waitForSelector(0xc000a92540, {0xc00258e3a8, 0x11}, 0xc018d8a158) github.com/grafana/xk6-browser@v1.5.1/common/frame.go:527 +0x1bb github.com/grafana/xk6-browser/common.(*Frame).waitForSelectorRetry(0xc000a92540, {0xc00258e3a8, 0x11}, 0xc018d8a158, 0xc001b4a780?) github.com/grafana/xk6-browser@v1.5.1/common/frame.go:511 +0x5a github.com/grafana/xk6-browser/common.(*Frame).WaitForSelector(0xc000a92540, {0xc00258e3a8, 0x11}, {0x1bc9d18, 0xc001b4a780}) github.com/grafana/xk6-browser@v1.5.1/common/frame.go:1930 +0x165 github.com/grafana/xk6-browser/browser.mapFrame.func14({0xc00258e3a8?, 0x2?}, {0x1bc9d18?, 0xc001b4a780?}) github.com/grafana/xk6-browser@v1.5.1/browser/mapping.go:491 +0x45 reflect.Value.call({0x15a34a0?, 0xc000a87080?, 0x8?}, {0x17ec3d9, 0x4}, {0xc001b4a7e0, 0x2, 0xc0149663e0?}) reflect/value.go:596 +0xca6 reflect.Value.Call({0x15a34a0?, 0xc000a87080?, 0xc001b4a780?}, {0xc001b4a7e0?, 0xc00164ea10?, 0x7fcfca223bd8?}) reflect/value.go:380 +0xb9 github.com/dop251/goja.(*Runtime).newWrappedFunc.(*Runtime).wrapReflectFunc.func1({{0x1bc9d18, 0xc003544210}, {0xc0159497b8, 0x2, 0x2d}}) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/runtime.go:1982 +0x3bd github.com/dop251/goja.(*nativeFuncObject).vmCall(0xc0017be840, 0xc0034905a0, 0x2) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/func.go:563 +0x184 github.com/dop251/goja.call.exec(0x5?, 0xc0034905a0) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/vm.go:3375 +0x66 github.com/dop251/goja.(*vm).run(0xc0034905a0) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/vm.go:582 +0x5b github.com/dop251/goja.(*vm).runTryInner(0xc018d8ac18?) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/vm.go:834 +0x65 github.com/dop251/goja.(*generator).step(0xc0009287e0) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/func.go:762 +0x2b github.com/dop251/goja.(*asyncRunner).start(0xc0009287e0, 0x1) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/func.go:733 +0xfd github.com/dop251/goja.(*baseJsFuncObject).asyncVmCall(0xc0032a5a40, 0xc0034905a0, 0x1, 0xc00164e990) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/func.go:664 +0x79 github.com/dop251/goja.(*asyncFuncObject).vmCall(0xc0032a5a40, 0xc0034905a0, 0x1) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/func.go:670 +0x65 github.com/dop251/goja.call.exec(0xd988e5?, 0xc0034905a0) github.com/dop251/goja@v0.0.0-20240220182346-e401ed450204/vm.go:3375 +0x66 github.com/dop251/goja.(*vm).run(0xc0034905a0) github.com/dop251/goja@v0.0.0-20240220182346-e401ed4502 ```

Case 2

Test run ID: 3395610 (Browser version: 1.8.5) ``` fatal error: concurrent map writes goroutine 392040 [running]: github.com/grafana/xk6-browser/common.(*Keyboard).up(0xc001366d70, {0xc00112fa4c, 0x1}) github.com/grafana/xk6-browser@v1.8.5/common/keyboard.go:144 +0x145 github.com/grafana/xk6-browser/common.(*Keyboard).press(0xc001366d70, {0xc00112fa4c, 0x1}, 0x1?) github.com/grafana/xk6-browser@v1.8.5/common/keyboard.go:297 +0xac github.com/grafana/xk6-browser/common.(*Keyboard).typ(0xc001366d70, {0xc0004f4500, 0x20}, 0xc002a71ce8) github.com/grafana/xk6-browser@v1.8.5/common/keyboard.go:310 +0x11e github.com/grafana/xk6-browser/common.(*ElementHandle).typ(0xc0023a6e60, {0x1f19698?, 0xc00758f570?}, {0xc0004f4500, 0x20}, 0xc002a71ce8) github.com/grafana/xk6-browser@v1.8.5/common/element_handle.go:619 +0x65 github.com/grafana/xk6-browser/common.(*Frame).typ.func1({0x1f19698?, 0xc00758f570?}, 0xc00758f570?) github.com/grafana/xk6-browser@v1.8.5/common/frame.go:1749 +0x4f github.com/grafana/xk6-browser/common.(*ElementHandle).newAction.func1({0x1f19698, 0xc00758f570}) github.com/grafana/xk6-browser@v1.8.5/common/element_handle.go:1545 +0x19e github.com/grafana/xk6-browser/common.(*ElementHandle).newAction.func2({0x1f19698, 0xc00758f570}, 0xc008df28c0, 0xc008df2a10) github.com/grafana/xk6-browser@v1.8.5/common/element_handle.go:1560 +0x4f github.com/grafana/xk6-browser/common.(*Frame).typ.(*Frame).newAction.func2({0x1f19698, 0xc00758f570}, 0xc008df28c0, 0xc008df2a10) github.com/grafana/xk6-browser@v1.8.5/common/frame.go:2148 +0x178 created by github.com/grafana/xk6-browser/common.call in goroutine 392027 github.com/grafana/xk6-browser@v1.8.5/common/helpers.go:103 +0x14c goroutine 1 [chan receive, 2 minutes]: go.k6.io/k6/execution.(*Scheduler).Run(0xc00037f880, {0x1f19628, 0xc0000a9900}, {0x1f195f0, 0xc0004df350}, 0xc000290380) go.k6.io/k6/execution/scheduler.go:508 +0xcb4 go.k6.io/k6/cmd.(*cmdRun).run(0xc000037040, 0xc00039a008, {0xc00003fc08, 0x1, 0x3b}) go.k6.io/k6/cmd/run.go:397 +0x1545 github.com/spf13/cobra.(*Command).execute(0xc00039a008, {0xc00003f808, 0x3b, 0x3f}) github.com/spf13/cobra@v1.4.0/command.go:856 +0x68a github.com/spf13/cobra.(*Command).ExecuteC(0xc00027f608) github.com/spf13/cobra@v1.4.0/command.go:974 +0x38d github.com/spf13/cobra.(*Command).Execute(...) github.com/spf13/cobra@v1.4.0/command.go:902 go.k6.io/k6/cmd.(*rootCommand).execute(0xc0000e1f20) go.k6.io/k6/cmd/root.go:108 +0xfb go.k6.io/k6/cmd.Execute() go.k6.io/k6/cmd/root.go:130 +0x2f main.main() go.k6.io/k6/main.go:9 +0xf goroutine 21 [chan receive]: go.k6.io/k6/log.(*lokiHook).Listen.func2() go.k6.io/k6/log/loki.go:168 +0x10f created by go.k6.io/k6/log.(*lokiHook).Listen in goroutine 7 go.k6.io/k6/log/loki.go:165 +0x2f9 goroutine 7 [select]: go.k6.io/k6/log.(*lokiHook).Listen(0xc00026ec30, {0x1f19628, 0xc0000a98b0}) go.k6.io/k6/log/loki.go:220 +0x3dc go.k6.io/k6/cmd.(*rootCommand).setLoggerHook.func1() go.k6.io/k6/cmd/root.go:287 +0x2d created by go.k6.io/k6/cmd.(*rootCommand).setLoggerHook in goroutine 1 go.k6.io/k6/cmd/root.go:286 +0xb0 goroutine 8 [select, 2 minutes]: io.(*pipe).read(0xc00009bc80, {0xc00045a000, 0x10000, 0xc000524e00?}) io/pipe.go:57 +0xa5 io.(*PipeReader).Read(0xc000071690?, {0xc00045a000?, 0x0?, 0x10000?}) io/pipe.go:134 +0x1a bufio.(*Scanner).Scan(0xc000455f28) bufio/scan.go:219 +0x81e github.com/sirupsen/logrus.(*Entry).writerScanner(0xc000272620, 0xc00009bc80, 0xc00049d640) github.com/sirupsen/logrus@v1.9.3/writer.go:86 +0x11d created by github.com/sirupsen/logrus.(*Entry).WriterLevel in goroutine 1 github.com/sirupsen/logrus@v1.9.3/writer.go:57 +0x31f goroutine 9 [chan receive, 2 minutes]: go.k6.io/k6/cmd.(*rootCommand).setupLoggers.func2() go.k6.io/k6/cmd/root.go:276 +0x34 created by go.k6.io/k6/cmd.(*rootCommand).setupLoggers in goroutine 1 go.k6.io/k6/cmd/root.go:275 +0x637 goroutine 71 [chan receive]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleIterEvents(0xc000143260, {0x1f19438, 0x2f0e320}, 0xc00029ee70, 0xc000417950) github.com/grafana/xk6-browser@v1.8.5/browser/registry.go:264 +0x85 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 27 github.com/grafana/xk6-browser@v1.8.5/browser/registry.go:251 +0x336 goroutine 11 [chan receive, 2 minutes]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleExitEvent(0xc0001c73e0, 0x0?, 0x0?) github.com/grafana/xk6-browser@v1.8.5/browser/registry.go:333 +0x45 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 1 github.com/grafana/xk6-browser@v1.8.5/browser/registry.go:250 +0x2b2 goroutine 12 [chan receive, 2 minutes]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleIterEvents(0xc0001c73e0, {0x1f19438, 0x2f0e320}, 0xc000273810, 0xc00031b080) github.com/grafana/xk6-browser@v1.8.5/browser/registry.go:264 +0x85 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 1 github.com/grafana/xk6-browser@v1.8.5/browser/registry.go:251 +0x336 goroutine 13 [select]: go.opentelemetry.io/otel/sdk/trace.(*batchSpanProcessor).processQueue(0xc0003fba40) go.openteleme ```

Case 3

Test run ID: 3459317 (Browser version: 1.8.5) ``` fatal error: concurrent map writes goroutine 2289755 [running]: github.com/grafana/xk6-browser/common.(*FrameSession).attachWorkerToTarget(0xc0008a1bc0, 0xc0007d2bd0, {0xc001c789c0, 0x20}) github.com/grafana/xk6-browser@v1.9.1/common/frame_session.go:1056 +0x19b github.com/grafana/xk6-browser/common.(*FrameSession).onAttachedToTarget(0xc0008a1bc0, 0xc00901c220) github.com/grafana/xk6-browser@v1.9.1/common/frame_session.go:969 +0x2a6 github.com/grafana/xk6-browser/common.(*FrameSession).initEvents.func1() github.com/grafana/xk6-browser@v1.9.1/common/frame_session.go:303 +0x233 created by github.com/grafana/xk6-browser/common.(*FrameSession).initEvents in goroutine 2278207 github.com/grafana/xk6-browser@v1.9.1/common/frame_session.go:239 +0x19b goroutine 1 [chan receive, 3 minutes]: go.k6.io/k6/execution.(*Scheduler).Run(0xc000190f80, {0x1f91908, 0xc0002e01e0}, {0x1f918d0, 0xc0003d8360}, 0xc000270850) go.k6.io/k6/execution/scheduler.go:508 +0xcb4 go.k6.io/k6/cmd.(*cmdRun).run(0xc0003c9bc0, 0xc000330588, {0xc000227508, 0x1, 0x2d}) go.k6.io/k6/cmd/run.go:397 +0x1545 github.com/spf13/cobra.(*Command).execute(0xc000330588, {0xc000227208, 0x2d, 0x2f}) github.com/spf13/cobra@v1.4.0/command.go:856 +0x68a github.com/spf13/cobra.(*Command).ExecuteC(0xc00026d608) github.com/spf13/cobra@v1.4.0/command.go:974 +0x38d github.com/spf13/cobra.(*Command).Execute(...) github.com/spf13/cobra@v1.4.0/command.go:902 go.k6.io/k6/cmd.(*rootCommand).execute(0xc000032810) go.k6.io/k6/cmd/root.go:108 +0xfb go.k6.io/k6/cmd.Execute() go.k6.io/k6/cmd/root.go:130 +0x2f main.main() go.k6.io/k6/main.go:9 +0xf goroutine 21 [select]: go.k6.io/k6/log.(*lokiHook).Listen(0xc000323e10, {0x1f91908, 0xc0002e0190}) go.k6.io/k6/log/loki.go:220 +0x3dc go.k6.io/k6/cmd.(*rootCommand).setLoggerHook.func1() go.k6.io/k6/cmd/root.go:287 +0x2d created by go.k6.io/k6/cmd.(*rootCommand).setLoggerHook in goroutine 1 go.k6.io/k6/cmd/root.go:286 +0xb0 goroutine 22 [select, 3 minutes]: io.(*pipe).read(0xc000230d20, {0xc000476000, 0x10000, 0xc0000b8fc0?}) io/pipe.go:57 +0xa5 io.(*PipeReader).Read(0xc00043ae90?, {0xc000476000?, 0x4?, 0x10000?}) io/pipe.go:134 +0x1a bufio.(*Scanner).Scan(0xc000457f28) bufio/scan.go:219 +0x81e github.com/sirupsen/logrus.(*Entry).writerScanner(0xc0002ccd90, 0xc000230d20, 0xc0001224c0) github.com/sirupsen/logrus@v1.9.3/writer.go:86 +0x11d created by github.com/sirupsen/logrus.(*Entry).WriterLevel in goroutine 1 github.com/sirupsen/logrus@v1.9.3/writer.go:57 +0x31f goroutine 23 [chan receive, 3 minutes]: go.k6.io/k6/cmd.(*rootCommand).setupLoggers.func2() go.k6.io/k6/cmd/root.go:276 +0x34 created by go.k6.io/k6/cmd.(*rootCommand).setupLoggers in goroutine 1 go.k6.io/k6/cmd/root.go:275 +0x637 goroutine 7 [chan receive]: go.k6.io/k6/log.(*lokiHook).Listen.func2() go.k6.io/k6/log/loki.go:168 +0x10f created by go.k6.io/k6/log.(*lokiHook).Listen in goroutine 21 go.k6.io/k6/log/loki.go:165 +0x2f9 goroutine 68 [chan receive, 3 minutes]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleExitEvent(0xc0000acd20, 0x422d2d2d2d2d0a0a?, 0x524543204e494745?) github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:333 +0x45 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 14 github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:250 +0x2b2 goroutine 25 [chan receive, 3 minutes]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleExitEvent(0xc000140780, 0x0?, 0x0?) github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:333 +0x45 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 1 github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:250 +0x2b2 goroutine 26 [chan receive, 3 minutes]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleIterEvents(0xc000140780, {0x1f91718, 0x2fc9fa0}, 0xc00026bf10, 0xc000296330) github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:264 +0x85 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 1 github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:251 +0x336 goroutine 27 [select]: go.opentelemetry.io/otel/sdk/trace.(*batchSpanProcessor).processQueue(0xc0001c9ea0) go.opentelemetry.io/otel/sdk@v1.29.0/trace/batch_span_processor.go:301 +0x114 go.opentelemetry.io/otel/sdk/trace.NewBatchSpanProcessor.func1() go.opentelemetry.io/otel/sdk@v1.29.0/trace/batch_span_processor.go:117 +0x4e created by go.opentelemetry.io/otel/sdk/trace.NewBatchSpanProcessor in goroutine 1 go.opentelemetry.io/otel/sdk@v1.29.0/trace/batch_span_processor.go:115 +0x2e5 goroutine 69 [chan receive]: github.com/grafana/xk6-browser/browser.(*browserRegistry).handleIterEvents(0xc0000acd20, {0x1f91718, 0x2fc9fa0}, 0xc00029c5b0, 0xc0006351d0) github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:264 +0x85 created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 14 github.com/grafana/xk6-browser@v1.9.1/browser/registry.go:251 +0x336 goroutine 212 [chan receive, 3 minutes]: go.k6.io/k6/lib/executor.trackProgress({0x1f91908, 0xc000a9e320}, {0x1f918d0, 0xc000a ```

Tasks

### Tasks
- [ ] Issue for case 1
- [ ] Issue for case 2
- [ ] Issue for case 3
- [ ] Update the k6 release notes

Related PR(s)/Issue(s)

ankur22 commented 1 week ago

Test run: 3544658

fatal error: concurrent map writes

goroutine 3218 [running]:
github.com/grafana/sobek.(*templatedObject).getOwnPropStr(0xc00058c2d0, {0x1c2411b, 0x8})
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/object_template.go:113 +0xb1
github.com/grafana/sobek.(*templatedObject).getStr(0xc00058c2d0, {0x1c2411b, 0x8}, {0x1faf738, 0xc0009ca360})
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/object_template.go:92 +0x2c
github.com/grafana/sobek.(*baseObject).getStr(0xc0006375e0, {0x1c2411b, 0x8}, {0x0, 0x0})
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/object.go:355 +0xbd
github.com/grafana/sobek.(*Object).tryPrimitive(0xc0009ca360, {0x1c2411b?, 0x2fba860?})
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/object.go:840 +0x34
github.com/grafana/sobek.(*Object).ordinaryToPrimitiveString(0xc0009ca360)
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/object.go:866 +0x28
github.com/grafana/sobek.(*Object).toPrimitiveString(0xc0009ca360)
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/object.go:905 +0x3b
github.com/grafana/sobek.(*Object).String(0x2?)
github.com/grafana/sobek@v0.0.0-20241024150027-d91f02b05e9b/value.go:715 +0x13
github.com/grafana/xk6-browser/browser.mapPage.func11.1()
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/browser/page_mapping.go:85 +0x43
github.com/grafana/xk6-browser/k6ext.promise.func1()
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/k6ext/promise.go:24 +0x2c
created by github.com/grafana/xk6-browser/k6ext.promise in goroutine 78
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/k6ext/promise.go:23 +0x9a

goroutine 1 [chan receive]:
go.k6.io/k6/execution.(*Scheduler).Run(0xc00011ea80, {0x1f9ad08, 0xc000292960}, {0x1f9acd0, 0xc00010c2a0}, 0xc000272620)
go.k6.io/k6/execution/scheduler.go:508 +0xcb4
go.k6.io/k6/cmd.(*cmdRun).run(0xc00028f2c0, 0xc0001fbb88, {0xc00038a008, 0x1, 0x2d})
go.k6.io/k6/cmd/run.go:397 +0x1545
github.com/spf13/cobra.(*Command).execute(0xc0001fbb88, {0xc0001b1b08, 0x2d, 0x2f})
github.com/spf13/cobra@v1.4.0/command.go:856 +0x68a
github.com/spf13/cobra.(*Command).ExecuteC(0xc0001e8588)
github.com/spf13/cobra@v1.4.0/command.go:974 +0x38d
github.com/spf13/cobra.(*Command).Execute(...)
github.com/spf13/cobra@v1.4.0/command.go:902
go.k6.io/k6/cmd.(*rootCommand).execute(0xc0003f31a0)
go.k6.io/k6/cmd/root.go:108 +0xfb
go.k6.io/k6/cmd.Execute()
go.k6.io/k6/cmd/root.go:130 +0x2f
main.main()
go.k6.io/k6/main.go:9 +0xf

goroutine 8 [select]:
go.k6.io/k6/log.(*lokiHook).Listen(0xc00037ad00, {0x1f9ad08, 0xc000292910})
go.k6.io/k6/log/loki.go:220 +0x3dc
go.k6.io/k6/cmd.(*rootCommand).setLoggerHook.func1()
go.k6.io/k6/cmd/root.go:287 +0x2d
created by go.k6.io/k6/cmd.(*rootCommand).setLoggerHook in goroutine 1
go.k6.io/k6/cmd/root.go:286 +0xb0

goroutine 9 [select]:
io.(*pipe).read(0xc0000adc20, {0xc000400000, 0x10000, 0xc000082df0?})
io/pipe.go:57 +0xa5
io.(*PipeReader).Read(0xc000082e90?, {0xc000400000?, 0x0?, 0x10000?})
io/pipe.go:134 +0x1a
bufio.(*Scanner).Scan(0xc0002d5f28)
bufio/scan.go:219 +0x81e
github.com/sirupsen/logrus.(*Entry).writerScanner(0xc0001e6bd0, 0xc0000adc20, 0xc00028f750)
github.com/sirupsen/logrus@v1.9.3/writer.go:86 +0x11d
created by github.com/sirupsen/logrus.(*Entry).WriterLevel in goroutine 1
github.com/sirupsen/logrus@v1.9.3/writer.go:57 +0x31f

goroutine 10 [chan receive]:
go.k6.io/k6/cmd.(*rootCommand).setupLoggers.func2()
go.k6.io/k6/cmd/root.go:276 +0x34
created by go.k6.io/k6/cmd.(*rootCommand).setupLoggers in goroutine 1
go.k6.io/k6/cmd/root.go:275 +0x637

goroutine 20 [chan receive]:
go.k6.io/k6/log.(*lokiHook).Listen.func2()
go.k6.io/k6/log/loki.go:168 +0x10f
created by go.k6.io/k6/log.(*lokiHook).Listen in goroutine 8
go.k6.io/k6/log/loki.go:165 +0x2f9

goroutine 53 [chan receive]:
github.com/grafana/xk6-browser/browser.(*browserRegistry).handleIterEvents(0xc0000aca80, {0x1f9ab28, 0x2fd2b20}, 0xc000353650, 0xc0002df800)
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/browser/registry.go:264 +0x85
created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 27
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/browser/registry.go:251 +0x336

goroutine 11 [chan receive]:
github.com/grafana/xk6-browser/browser.(*browserRegistry).handleExitEvent(0xc000150cc0, 0x0?, 0x0?)
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/browser/registry.go:333 +0x45
created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 1
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/browser/registry.go:250 +0x2b2

goroutine 12 [chan receive]:
github.com/grafana/xk6-browser/browser.(*browserRegistry).handleIterEvents(0xc000150cc0, {0x1f9ab28, 0x2fd2b20}, 0xc0001e7f10, 0xc000028270)
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e4540a3a/browser/registry.go:264 +0x85
created by github.com/grafana/xk6-browser/browser.newBrowserRegistry in goroutine 1
github.com/grafana/xk6-browser@v1.9.2-0.20241118153201-d741e