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

monitor: breakpoint debugger on monitor and on IDEs (via DAP) #1656

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

ktock
Copy link
Collaborator

@ktock ktock commented Mar 1, 2023

Related: #1104

Breakpoint debugger

This commit adds an interactive breakpoint debugger on monitor.

This adds a Solve controller API for requesting building a specific vertex.
Please see each commit's commit message for details.

Monitor walks the LLB graph with support for breakpoints and can exec into each step's container using Solve and Invoke API. Monitor provides DAP (Debug Adapter Protocol) so that IDE's debugger can use the breakpoints on their rich UI. DAP implementation is mostly inheited from buildg.

Debugger on the monitor

show command shows the source file with breakpoint information.

(buildx) show
Filename: "Dockerfile"
      1| FROM busybox
      2| RUN echo hi > /hi
      3| RUN echo aaaa > /a

continue starts the build.
=> shows the position where the build is pausing.

(buildx) continue
...
Break at [stopOnEntry]
Filename: "Dockerfile"
 =>   1| FROM busybox
      2| RUN echo hi > /hi
      3| RUN echo aaaa > /a

break command sets a breakpoint
The position of the breakpoint is shown by * on the show command output.

(buildx) break 3
(buildx) show
Filename: "Dockerfile"
 =>   1| FROM busybox
      2| RUN echo hi > /hi
*     3| RUN echo aaaa > /a

continue resumes the build and stops when it encounters a breakpoint.
C-a-c switches IO to the shell.

(buildx) Switched IO

/ # cat /a
aaaa
  • Implemented commands
    • show: shows the Dockerfile
    • break: set a breakpoint at the specified line
    • breakpoints: list key-value pairs of available breakpoints
    • clear: clear the breakpoint specified by the key
    • clearall: clear all breakpoints
    • next: proceed to the next line
    • continue: resume the build until the next breakpoint

Debugger on IDEs

monitor provides DAP (Debug Adapter Protocol) and allows controlling the monitor on IDEs.
Editors can use buildx monitor via that standard protocol.

Please see docs/guides/breakpoints.md for details about configuration.

VS Code emacs neovim
vscode-dap emacs-dap nvim-dap

@ktock ktock force-pushed the monitor-continue-r-r branch 3 times, most recently from 2f1e4ad to 94aabcf Compare March 1, 2023 02:11
@ktock
Copy link
Collaborator Author

ktock commented Mar 1, 2023

CI passed about the codes.
CI fails on docs-upstream / validate / run (pull_request) but make docs didn't fix that 🤔

@crazy-max
Copy link
Member

crazy-max commented Mar 1, 2023

CI passed about the codes. CI fails on docs-upstream / validate / run (pull_request) but make docs didn't fix that 🤔

https://github.com/docker/buildx/actions/runs/4299321437/jobs/7494431087#step:7:38

/tmp/_data/buildx/docker_buildx__INTERNAL_DAP_ATTACH_CONTAINER.yaml => _data/buildx/docker_buildx__INTERNAL_DAP_ATTACH_CONTAINER.yaml

@ktock Yes looks linked to the new internal command you just added. Can you add an extra commit replacing

rm -f /out/reference/*__INTERNAL_SERVE.yaml /out/reference/*__INTERNAL_SERVE.md

with

rm -f /out/reference/*__INTERNAL_*

@ktock ktock force-pushed the monitor-continue-r-r branch 2 times, most recently from 3e50a48 to 35cab95 Compare March 1, 2023 06:58
@ktock
Copy link
Collaborator Author

ktock commented Mar 1, 2023

Thank you for the comment! but it looks still failing with that change:

https://github.com/docker/buildx/pull/1656/files#diff-db64df798bacc13502bd135604bce3b7cb9c5a8a551cd674a2e03d86fdc7ceba

@crazy-max
Copy link
Member

Thank you for the comment! but it looks still failing with that change:

https://github.com/docker/buildx/pull/1656/files#diff-db64df798bacc13502bd135604bce3b7cb9c5a8a551cd674a2e03d86fdc7ceba

Thanks I will take a look

@ktock ktock force-pushed the monitor-continue-r-r branch 2 times, most recently from 1b2034f to 648e37c Compare March 28, 2023 04:54
@crazy-max
Copy link
Member

crazy-max commented Mar 28, 2023

@ktock I try to find the root cause for the docs-upstream issue. I keep you posted when I have smth.

Edit: looks good now

@crazy-max crazy-max force-pushed the monitor-continue-r-r branch 2 times, most recently from 1c91613 to dfbdef7 Compare March 28, 2023 06:37
@ktock
Copy link
Collaborator Author

ktock commented Mar 28, 2023

@crazy-max Thank you for fixing it.

@jedevc
Copy link
Collaborator

jedevc commented Apr 7, 2023

See #1640 (comment) 👀 I know there's a lot of vendor changes here as well, but there's still a lot going on 🎉

I think it might even be worth splitting out the DAP into a separate PR (though maybe once #1640 is merged, to prevent too much PR chaining), it feels like a separate feature, with it's own complexities to me.

@jedevc
Copy link
Collaborator

jedevc commented Apr 14, 2023

What's the intended way to use the debugger? I am starting it using --invoke=sh, setting a break and then using reload - but I don't stop at that point?

When using on-error I easily hit a panic:

$ buildx build . --detach=false --invoke on-error
...
Interactive container was restarted. Press Ctrl-a-c to switch to the new container
(buildx) show
...
(buildx) continue
(buildx) fatal error: concurrent map read and map write
...

I also don't see show showing the current line in the Dockerfile when stopping on on-error.

@ktock ktock force-pushed the monitor-continue-r-r branch 2 times, most recently from 371f2bb to 2c5432b Compare April 17, 2023 09:10
@ktock
Copy link
Collaborator Author

ktock commented Apr 17, 2023

@jedevc Thank you for trying this patch.

What's the intended way to use the debugger?

Could you use continue to start the breakpoint debugger? Please see also the doc: https://github.com/docker/buildx/blob/371f2bb0d90f5e62f63e5a53b3577cff41e14273/docs/guides/breakpoints.md

When using on-error I easily hit a panic:

Could you post the reproducer?

@jedevc
Copy link
Collaborator

jedevc commented Apr 17, 2023

Hm, so I can reproduce by taking a fresh clone of buildkit and then modifying the last part of the Dockerfile to add a bad line:

diff --git a/Dockerfile b/Dockerfile
index b489426d4..b11637145 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -302,3 +302,4 @@ ENTRYPOINT ["rootlesskit", "buildkitd"]
 
 # buildkit builds the buildkit container image
 FROM buildkit-$TARGETOS AS buildkit
+RUN skdfjalsdkfj

Then I can build with buildx build --detach=false . --invoke=on-error. I then switch back to monitor mode, and type continue to get the panic:

$ buildx build --detach=false . --invoke=on-error
INFO: launching local buildx controller
WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
[+] Building 1.9s (44/44) FINISHED                                                                               docker-container:container
 => [internal] load build definition from Dockerfile                                                                                   0.0s
 => => transferring dockerfile: 12.76kB                                                                                                0.0s
 => resolve image config for docker.io/docker/dockerfile-upstream:master                                                               0.5s
 => CACHED docker-image://docker.io/docker/dockerfile-upstream:master@sha256:9da94d31a48e7e8e7d0e6ba522a9857e3cba83037c6bcd5768668600  0.0s
 => => resolve docker.io/docker/dockerfile-upstream:master@sha256:9da94d31a48e7e8e7d0e6ba522a9857e3cba83037c6bcd5768668600cf8263cb     0.0s
 => [internal] load metadata for docker.io/tonistiigi/binfmt:buildkit-v7.1.0-30@sha256:45dd57b4ba2f24e2354f71f1e4e51f073cb7a28fd848ce  0.0s
 => [internal] load metadata for docker.io/library/alpine:3.17                                                                         0.9s
 => [internal] load metadata for docker.io/library/golang:1.20-alpine3.17                                                              0.8s
 => [internal] load metadata for docker.io/tonistiigi/xx:1.2.1                                                                         0.6s
 => [internal] load .dockerignore                                                                                                      0.0s
 => => transferring context: 56B                                                                                                       0.0s
 => [git 1/2] FROM docker.io/library/alpine:3.17@sha256:124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126               0.0s
 => => resolve docker.io/library/alpine:3.17@sha256:124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126                   0.0s
 => [internal] load build context                                                                                                      0.4s
 => => transferring context: 1.19MB                                                                                                    0.3s
 => FROM docker.io/tonistiigi/binfmt:buildkit-v7.1.0-30@sha256:45dd57b4ba2f24e2354f71f1e4e51f073cb7a28fd848ce6f5f2a7701142a6bf0        0.0s
 => => resolve docker.io/tonistiigi/binfmt:buildkit-v7.1.0-30@sha256:45dd57b4ba2f24e2354f71f1e4e51f073cb7a28fd848ce6f5f2a7701142a6bf0  0.0s
 => [golatest 1/1] FROM docker.io/library/golang:1.20-alpine3.17@sha256:08e9c086194875334d606765bd60aa064abd3c215abfbcf5737619110d48d  0.0s
 => => resolve docker.io/library/golang:1.20-alpine3.17@sha256:08e9c086194875334d606765bd60aa064abd3c215abfbcf5737619110d48d114        0.0s
 => [xx 1/1] FROM docker.io/tonistiigi/xx:1.2.1@sha256:8879a398dedf0aadaacfbd332b29ff2f84bc39ae6d4e9c0a1109db27ac5ba012                0.0s
 => => resolve docker.io/tonistiigi/xx:1.2.1@sha256:8879a398dedf0aadaacfbd332b29ff2f84bc39ae6d4e9c0a1109db27ac5ba012                   0.0s
 => CACHED [runc 2/3] RUN set -e; xx-apk add musl-dev gcc libseccomp-dev libseccomp-static;   [ "$(xx-info arch)" != "ppc64le" ] || X  0.0s
 => CACHED [runc 3/3] RUN --mount=from=runc-src,src=/usr/src/runc,target=. --mount=target=/root/.cache,type=cache   CGO_ENABLED=1 xx-  0.0s
 => CACHED [gobuild-base 1/2] RUN apk add --no-cache file bash clang lld pkgconfig git make                                            0.0s
 => CACHED [runc 1/3] WORKDIR /go/src/github.com/opencontainers/runc                                                                   0.0s
 => CACHED [buildkit-export 1/2] RUN apk add --no-cache fuse3 git openssh pigz xz   && ln -s fusermount3 /usr/bin/fusermount           0.0s
 => CACHED [git 2/2] RUN apk add --no-cache git                                                                                        0.0s
 => CACHED [runc-src 1/2] WORKDIR /usr/src                                                                                             0.0s
 => CACHED [runc-src 2/2] RUN git clone https://github.com/opencontainers/runc.git runc   && cd runc && git checkout -q "v1.1.6"       0.0s
 => CACHED [buildkit-base 1/1] WORKDIR /src                                                                                            0.0s
 => CACHED [buildkit-version 1/1] RUN --mount=target=.   PKG=github.com/moby/buildkit VERSION=$(git describe --match 'v[0-9]*' --dirt  0.0s
 => CACHED [buildctl 1/1] RUN --mount=target=. --mount=target=/root/.cache,type=cache   --mount=target=/go/pkg/mod,type=cache   --mou  0.0s
 => CACHED [buildkitd 1/1] RUN --mount=target=. --mount=target=/root/.cache,type=cache   --mount=target=/go/pkg/mod,type=cache   --mo  0.0s
 => ERROR [buildkit 1/1] RUN skdfjalsdkfj                                                                                              0.0s
 => CACHED [binaries-linux 3/4] COPY --link --from=buildctl /usr/bin/buildctl /                                                        0.0s
 => CACHED [binaries-linux 4/4] COPY --link --from=buildkitd /usr/bin/buildkitd /                                                      0.0s
 => CACHED [buildkit-linux 1/1] COPY --link --from=binaries / /usr/bin/                                                                0.0s
 => CACHED [buildkit-export 2/2] COPY --link examples/buildctl-daemonless/buildctl-daemonless.sh /usr/bin/                             0.0s
 => CACHED [gobuild-base 2/2] COPY --link --from=xx / /                                                                                0.0s
 => CACHED [binaries-linux 2/4] COPY --link --from=tonistiigi/binfmt:buildkit-v7.1.0-30@sha256:45dd57b4ba2f24e2354f71f1e4e51f073cb7a2  0.0s
------
 > [buildkit 1/1] RUN skdfjalsdkfj:
#0 0.040 /bin/sh: skdfjalsdkfj: not found
------
Launching interactive container. Press Ctrl-a-c to switch to monitor console
Interactive container was restarted with process "nv61di6am2cgoae8trnz0ydn2". Press Ctrl-a-c to switch to the new container
/ # Switched IO
(buildx) continue
(buildx) fatal error: concurrent map read and map write

goroutine 17370 [running]:
github.com/moby/buildkit/client/llb.(*DefinitionOp).Inputs(0xc000869cc0)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/llb/definition.go:214 +0x368
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be500}, {{0x2668b60, 0xc0003c35c0}, 0xc0009dc2d0, {0x1ebeae0, 0xc00015dfe0}, 0xc0008a2ba0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:85 +0x142
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 1 [select]:
github.com/docker/buildx/monitor.RunMonitor({_, _}, {_, _}, _, _, {{0x0, 0x0, 0x0}, {0xc0008739a0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/monitor.go:475 +0x12fa
github.com/docker/buildx/commands.launchControllerAndRunBuild({_, _}, {{0x37ab9a0, 0x0, 0x0}, {0x37ab9a0, 0x0, 0x0}, {0x37ab9a0, 0x0, ...}, ...})
	github.com/docker/buildx/commands/build.go:607 +0xe05
github.com/docker/buildx/commands.buildCmd.func1(0xc000350600?, {0xc000875830?, 0x3?, 0x3?})
	github.com/docker/buildx/commands/build.go:264 +0x3c8
github.com/spf13/cobra.(*Command).execute(0xc000350600, {0xc0000500c0, 0x3, 0x3})
	github.com/spf13/cobra@v1.6.1/command.go:916 +0x862
github.com/spf13/cobra.(*Command).ExecuteC(0xc000350300)
	github.com/spf13/cobra@v1.6.1/command.go:1044 +0x3bd
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/cobra@v1.6.1/command.go:968
main.runStandalone(0x234b838?)
	github.com/docker/buildx/cmd/buildx/main.go:44 +0x75
main.main()
	github.com/docker/buildx/cmd/buildx/main.go:64 +0x108

goroutine 51 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc0000bac60)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 52 [syscall]:
syscall.Syscall(0xc0000955d8?, 0x4b86c6?, 0x800000?, 0x7ffff800000?)
	syscall/syscall_linux.go:69 +0x27
syscall.read(0xc0000ba060?, {0xc00089e000?, 0x40d401?, 0x7ff06971ab88?})
	syscall/zsyscall_linux_amd64.go:711 +0x45
syscall.Read(...)
	syscall/syscall_unix.go:178
internal/poll.ignoringEINTRIO(...)
	internal/poll/fd_unix.go:794
internal/poll.(*FD).Read(0xc0000ba060?, {0xc00089e000?, 0x1000?, 0x1000?})
	internal/poll/fd_unix.go:163 +0x2ce
os.(*File).read(...)
	os/file_posix.go:31
os.(*File).Read(0xc000012010, {0xc00089e000?, 0x231c548?, 0x0?})
	os/file.go:118 +0x5e
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17356 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc001576c00)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 17268 [select]:
google.golang.org/grpc.newClientStreamWithParams.func4()
	google.golang.org/grpc@v1.53.0/stream.go:366 +0x92
created by google.golang.org/grpc.newClientStreamWithParams
	google.golang.org/grpc@v1.53.0/stream.go:365 +0xf2a

goroutine 67 [IO wait]:
internal/poll.runtime_pollWait(0x7ff069a00f58, 0x72)
	runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000066100?, 0xc000912000?, 0x0)
	internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000066100, {0xc000912000, 0x1000, 0x1000})
	internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000066100, {0xc000912000?, 0x2?, 0xc0003de640?})
	net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00044e188, {0xc000912000?, 0x0?, 0x0?})
	net/net.go:183 +0x45
net/http.(*persistConn).Read(0xc000466a20, {0xc000912000?, 0x44b3c0?, 0xc000900ec8?})
	net/http/transport.go:1943 +0x4e
bufio.(*Reader).fill(0xc000131440)
	bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc000131440, 0x1)
	bufio/bufio.go:144 +0x5d
net/http.(*persistConn).readLoop(0xc000466a20)
	net/http/transport.go:2107 +0x1ac
created by net/http.(*Transport).dialConn
	net/http/transport.go:1765 +0x16ea

goroutine 68 [select]:
net/http.(*persistConn).writeLoop(0xc000466a20)
	net/http/transport.go:2410 +0xf2
created by net/http.(*Transport).dialConn
	net/http/transport.go:1766 +0x173d

goroutine 17417 [select]:
io.(*pipe).read(0xc0010f5ec0, {0xc0009b8000, 0x1000, 0x43ad01?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0xc0000ac250?, {0xc0009b8000?, 0xc000926ae0?, 0xc0003aef50?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 56 [IO wait]:
internal/poll.runtime_pollWait(0x7ff069a00e68, 0x72)
	runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc0006d4d80?, 0xc00089f000?, 0x0)
	internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0006d4d80, {0xc00089f000, 0x1000, 0x1000})
	internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc0006d4d80, {0xc00089f000?, 0x43ade7?, 0xc0007cfc30?})
	net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00012db20, {0xc00089f000?, 0x0?, 0xc000642b60?})
	net/net.go:183 +0x45
net/http.(*persistConn).Read(0xc000876d80, {0xc00089f000?, 0xc000146120?, 0xc0007cfd30?})
	net/http/transport.go:1943 +0x4e
bufio.(*Reader).fill(0xc0000baea0)
	bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0000baea0, 0x1)
	bufio/bufio.go:144 +0x5d
net/http.(*persistConn).readLoop(0xc000876d80)
	net/http/transport.go:2107 +0x1ac
created by net/http.(*Transport).dialConn
	net/http/transport.go:1765 +0x16ea

goroutine 57 [select]:
net/http.(*persistConn).writeLoop(0xc000876d80)
	net/http/transport.go:2410 +0xf2
created by net/http.(*Transport).dialConn
	net/http/transport.go:1766 +0x173d

goroutine 81 [IO wait]:
internal/poll.runtime_pollWait(0x7ff069a00d78, 0x72)
	runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000176080?, 0xc0008cc000?, 0x0)
	internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000176080, {0xc0008cc000, 0x8009, 0x8009})
	internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000176080, {0xc0008cc000?, 0xc000146480?, 0xc000906e48?})
	net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000156050, {0xc0008cc000?, 0x2f?, 0x8001?})
	net/net.go:183 +0x45
github.com/docker/docker/pkg/stdcopy.StdCopy({0x2662560, 0xc000156060}, {0x26633e0, 0xc000012020}, {0x2662f80, 0xc000156050})
	github.com/docker/docker@v23.0.1+incompatible/pkg/stdcopy/stdcopy.go:108 +0x444
created by github.com/docker/buildx/driver/docker-container.demuxConn
	github.com/docker/buildx/driver/docker-container/driver.go:398 +0x1ed

goroutine 82 [select]:
go.opentelemetry.io/otel/sdk/trace.(*batchSpanProcessor).processQueue(0xc000690a00)
	go.opentelemetry.io/otel/sdk@v1.14.0/trace/batch_span_processor.go:293 +0x12c
go.opentelemetry.io/otel/sdk/trace.NewBatchSpanProcessor.func1()
	go.opentelemetry.io/otel/sdk@v1.14.0/trace/batch_span_processor.go:128 +0x65
created by go.opentelemetry.io/otel/sdk/trace.NewBatchSpanProcessor
	go.opentelemetry.io/otel/sdk@v1.14.0/trace/batch_span_processor.go:126 +0x2ea

goroutine 83 [select]:
google.golang.org/grpc.(*ccBalancerWrapper).watcher(0xc0006da3c0)
	google.golang.org/grpc@v1.53.0/balancer_conn_wrappers.go:115 +0x73
created by google.golang.org/grpc.newCCBalancerWrapper
	google.golang.org/grpc@v1.53.0/balancer_conn_wrappers.go:76 +0x22a

goroutine 59 [select]:
io.(*pipe).read(0xc000712420, {0xc0008d6000, 0x8000, 0x416030?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x43ade7?, {0xc0008d6000?, 0x43ae20?, 0xc000489860?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/driver/docker-container.(*demux).Read(0x800000601?, {0xc0008d6000?, 0xc000a0dd28?, 0x800000601?})
	github.com/docker/buildx/driver/docker-container/driver.go:411 +0x27
bufio.(*Reader).Read(0xc0000bb260, {0xc000442660, 0x9, 0x7ff090dce5b8?})
	bufio/bufio.go:237 +0x1bb
io.ReadAtLeast({0x265bea0, 0xc0000bb260}, {0xc000442660, 0x9, 0x9}, 0x9)
	io/io.go:332 +0x9a
io.ReadFull(...)
	io/io.go:351
golang.org/x/net/http2.readFrameHeader({0xc000442660?, 0x9?, 0x18?}, {0x265bea0?, 0xc0000bb260?})
	golang.org/x/net@v0.7.0/http2/frame.go:237 +0x6e
golang.org/x/net/http2.(*Framer).ReadFrame(0xc000442620)
	golang.org/x/net@v0.7.0/http2/frame.go:498 +0x95
google.golang.org/grpc/internal/transport.(*http2Client).reader(0xc000569b00, 0xc000876d80?)
	google.golang.org/grpc@v1.53.0/internal/transport/http2_client.go:1597 +0x257
created by google.golang.org/grpc/internal/transport.newHTTP2Client
	google.golang.org/grpc@v1.53.0/internal/transport/http2_client.go:394 +0x1e2a

goroutine 60 [select]:
google.golang.org/grpc/internal/transport.(*controlBuffer).get(0xc000565450, 0x1)
	google.golang.org/grpc@v1.53.0/internal/transport/controlbuf.go:416 +0x115
google.golang.org/grpc/internal/transport.(*loopyWriter).run(0xc0000bb320)
	google.golang.org/grpc@v1.53.0/internal/transport/controlbuf.go:534 +0x85
google.golang.org/grpc/internal/transport.newHTTP2Client.func6()
	google.golang.org/grpc@v1.53.0/internal/transport/http2_client.go:448 +0x6d
created by google.golang.org/grpc/internal/transport.newHTTP2Client
	google.golang.org/grpc@v1.53.0/internal/transport/http2_client.go:446 +0x23fc

goroutine 17267 [select]:
io.(*pipe).read(0xc0010f5800, {0xc000dc2000, 0x1000, 0x1000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x405d3d?, {0xc000dc2000?, 0x231c548?, 0xc85a01?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17273 [select]:
io.(*pipe).read(0xc0007d0f60, {0xc000dc3000, 0x1000, 0x1000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x405d3d?, {0xc000dc3000?, 0x231c548?, 0xc85a01?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17445 [semacquire]:
sync.runtime_Semacquire(0xc0002c56c0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24a01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0004d5c80)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e140}, {{0x2668b60, 0xc0003cc9c0}, 0xc0004f3e50, {0x1ebeae0, 0xc00015ddd0}, 0xc0010f5f20, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17434 [semacquire]:
sync.runtime_Semacquire(0xc0002c5860?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000e1c080)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e61e0}, {{0x2668b60, 0xc000938750}, 0xc000af55e0, {0x1ebeae0, 0xc001517b20}, 0xc000a55ab8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17396 [select]:
io.(*pipe).read(0xc0010f5d40, {0xc000997000, 0x1000, 0xc000907da8?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0xc001576960?, {0xc000997000?, 0x1?, 0x1000?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.copyToFunc({0x7ff069985268, 0xc0008a2960}, 0xc000907f60)
	github.com/docker/buildx/util/ioset/mux.go:231 +0x62
github.com/docker/buildx/util/ioset.NewMuxIO.func3()
	github.com/docker/buildx/util/ioset/mux.go:75 +0x1da
created by github.com/docker/buildx/util/ioset.NewMuxIO
	github.com/docker/buildx/util/ioset/mux.go:71 +0x5f1

goroutine 16887 [semacquire]:
sync.runtime_Semacquire(0xc0005831e0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775001?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000e1c200)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000af5720}, {{0x2668b60, 0xc0008869c0}, 0xc000af5810, {0x1ebeae0, 0xc001517c40}, 0xc0003b7860, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 16886 [semacquire]:
sync.runtime_Semacquire(0xc00040a4e0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24b01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000e1c100)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000af5630}, {{0x2668b60, 0xc000886960}, 0xc000af56d0, {0x1ebeae0, 0xc001517b90}, 0xc000a55ae8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17359 [select]:
io.(*pipe).read(0xc001576ae0, {0xc000e0e000, 0x1000, 0x1000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x0?, {0xc000e0e000?, 0x231c548?, 0x0?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17393 [select]:
io.(*pipe).read(0xc001576a20, {0xc001337000, 0x1000, 0x1?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x0?, {0xc001337000?, 0x0?, 0x0?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.copyToFunc({0x2662520, 0xc0001570f8}, 0xc000a46d60)
	github.com/docker/buildx/util/ioset/mux.go:231 +0x62
github.com/docker/buildx/util/ioset.NewMuxIO.func2()
	github.com/docker/buildx/util/ioset/mux.go:58 +0x12f
created by github.com/docker/buildx/util/ioset.NewMuxIO
	github.com/docker/buildx/util/ioset/mux.go:56 +0x205

goroutine 17395 [select]:
io.(*pipe).read(0xc001576ba0, {0xc000743000, 0x1000, 0x1?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x0?, {0xc000743000?, 0x0?, 0x0?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.copyToFunc({0x2662520, 0xc000157128}, 0xc000a4dd60)
	github.com/docker/buildx/util/ioset/mux.go:231 +0x62
github.com/docker/buildx/util/ioset.NewMuxIO.func2()
	github.com/docker/buildx/util/ioset/mux.go:58 +0x12f
created by github.com/docker/buildx/util/ioset.NewMuxIO
	github.com/docker/buildx/util/ioset/mux.go:56 +0x205

goroutine 17358 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc001576cc0)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 17357 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc001576c60)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 17394 [select]:
io.(*pipe).read(0xc001576b40, {0xc00095f000, 0x1000, 0xc00083e460?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x0?, {0xc00095f000?, 0x0?, 0x0?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.copyToFunc({0x2662520, 0xc000157118}, 0xc000a4cd60)
	github.com/docker/buildx/util/ioset/mux.go:231 +0x62
github.com/docker/buildx/util/ioset.NewMuxIO.func1()
	github.com/docker/buildx/util/ioset/mux.go:43 +0x12f
created by github.com/docker/buildx/util/ioset.NewMuxIO
	github.com/docker/buildx/util/ioset/mux.go:41 +0x3cf

goroutine 17360 [select]:
io.(*pipe).read(0xc0015769c0, {0xc00058c000, 0x1000, 0xc00083e460?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x4d6a7a5766503535?, {0xc00058c000?, 0x585a636f44756c58?, 0x6a2f61625a785346?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.copyToFunc({0x2662520, 0xc0001570e8}, 0xc0003b4d60)
	github.com/docker/buildx/util/ioset/mux.go:231 +0x62
github.com/docker/buildx/util/ioset.NewMuxIO.func1()
	github.com/docker/buildx/util/ioset/mux.go:43 +0x12f
created by github.com/docker/buildx/util/ioset.NewMuxIO
	github.com/docker/buildx/util/ioset/mux.go:41 +0x3cf

goroutine 17391 [select]:
io.(*pipe).read(0xc001576960, {0xc0006be000, 0x1000, 0x1000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x49?, {0xc0006be000?, 0x231c548?, 0x1?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17340 [chan receive]:
github.com/docker/buildx/build.NewContainer.func1.1({0x267f4b0?, 0xc000542190?}, {0x2683be0, 0xc000796400})
	github.com/docker/buildx/build/invoke.go:64 +0x43d
github.com/docker/buildx/build.(*ResultContext).build(...)
	github.com/docker/buildx/build/result.go:179
github.com/docker/buildx/build.NewContainer.func1()
	github.com/docker/buildx/build/invoke.go:33 +0x98
created by github.com/docker/buildx/build.NewContainer
	github.com/docker/buildx/build/invoke.go:32 +0x131

goroutine 17397 [select]:
github.com/docker/buildx/controller/local.(*localController).Invoke(0xc0005658b0, {_, _}, {_, _}, {_, _}, {{0x0, 0x0, 0x0}, ...}, ...)
	github.com/docker/buildx/controller/local/controller.go:137 +0x486
github.com/docker/buildx/monitor.RunMonitor.func9({0x267f4b0?, 0xc0004f3590?}, {0x22ff949?, _}, {_, _}, {{0x0, 0x0, 0x0}, {0xc0008739a0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/monitor.go:112 +0xff
github.com/docker/buildx/monitor.(*monitor).invoke(0xc000998a80, {0x267f4e8, 0xc000054108}, {0x22ff949, 0x5}, {0xc0009ae921, 0x19}, {{0x0, 0x0, 0x0}, ...})
	github.com/docker/buildx/monitor/monitor.go:568 +0x5a9
github.com/docker/buildx/monitor.(*monitor).startInvoke.func1()
	github.com/docker/buildx/monitor/monitor.go:531 +0x9e
created by github.com/docker/buildx/monitor.(*monitor).startInvoke
	github.com/docker/buildx/monitor/monitor.go:529 +0x21f

goroutine 17365 [semacquire]:
sync.runtime_Semacquire(0xc000974000?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775001?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2dc0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be050}, {{0x2668b60, 0xc0003c33e0}, 0xc0015be230, {0x1ebeae0, 0xc0008310e0}, 0xc000c168a0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17342 [select]:
io.(*pipe).read(0xc0010f57a0, {0xc000996000, 0x1000, 0x1000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0xc00009b000?, {0xc000996000?, 0x231c548?, 0xc000931f30?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17344 [select]:
io.(*pipe).read(0xc0007d0f00, {0xc0013b2000, 0x8000, 0x8000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x405d3d?, {0xc0013b2000?, 0xc00066d340?, 0xc85a01?})
	io/pipe.go:136 +0x25
io.copyBuffer({0x2662560, 0xc00066d340}, {0x2662520, 0xc000774f98}, {0x0, 0x0, 0x0})
	io/io.go:427 +0x1b2
io.Copy(...)
	io/io.go:386
github.com/moby/buildkit/frontend/gateway/grpcclient.(*container).Start.func2()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:891 +0x85
created by github.com/moby/buildkit/frontend/gateway/grpcclient.(*container).Start
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:890 +0x8b1

goroutine 17363 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbc901?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0005dbd60}, {{0x2668b60, 0xc0003c3320}, 0xc0005dbe00, {0x1ebeae0, 0xc000830b50}, 0xc0005d1cc8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17398 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc001576d20)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 17399 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc001576d80)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 17419 [semacquire]:
sync.runtime_Semacquire(0xc000583380?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775001?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0004d5d40)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0004f3ea0}, {{0x2668b60, 0xc00072fe30}, 0xc0004f3ef0, {0x1ebeae0, 0xc00015de40}, 0xc0010f5f80, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 16889 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcb01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000af5860}, {{0x2668b60, 0xc000886de0}, 0xc000af5900, {0x1ebeae0, 0xc001517cb0}, 0xc000a55b48, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 265 [select]:
golang.org/x/net/http2.(*serverConn).serve(0xc000958480)
	golang.org/x/net@v0.7.0/http2/server.go:938 +0x8ac
golang.org/x/net/http2.(*Server).ServeConn(0xc00029c4b0, {0x2688388?, 0xc000243880}, 0xc000c0f990)
	golang.org/x/net@v0.7.0/http2/server.go:531 +0xbc5
github.com/moby/buildkit/session.serve({0x267f4b0?, 0xc00047ff90}, 0xc0006c3860, {0x2688388?, 0xc000243880})
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/session/grpc.go:29 +0x16a
github.com/moby/buildkit/session.(*Session).Run(0xc000243810, {0x267f4b0?, 0xc00047f8b0?}, 0xc000475908)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/session/session.go:124 +0x715
github.com/moby/buildkit/client.(*Client).solve.func1()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/solve.go:216 +0x9f
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 264 [semacquire]:
sync.runtime_Semacquire(0xc000583520?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc00047f901?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000a23580)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/moby/buildkit/client.(*Client).solve(0xc000434ab0, {0x267f4e8, _}, _, _, {{0x37ab9a0, 0x0, 0x0}, 0xc000887050, 0x0, ...}, ...)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/solve.go:324 +0x1b1b
github.com/moby/buildkit/client.(*Client).Build(0xc000434ab0, {0x267f4e8?, _}, {{0x37ab9a0, 0x0, 0x0}, 0xc000887050, 0x0, {0xc00083d9c0, 0x19}, ...}, ...)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/build.go:65 +0x4e8
github.com/docker/buildx/build.getResultAt.func2()
	github.com/docker/buildx/build/result.go:94 +0x227
created by github.com/docker/buildx/build.getResultAt
	github.com/docker/buildx/build/result.go:88 +0x2df

goroutine 17415 [chan receive (nil chan)]:
github.com/docker/buildx/monitor.RunMonitor.func10.1()
	github.com/docker/buildx/monitor/monitor.go:143 +0x2e
created by github.com/docker/buildx/monitor.RunMonitor.func10
	github.com/docker/buildx/monitor/monitor.go:142 +0x285

goroutine 263 [chan receive]:
github.com/docker/buildx/build.getResultAt.func1()
	github.com/docker/buildx/build/result.go:70 +0x6d
created by github.com/docker/buildx/build.getResultAt
	github.com/docker/buildx/build/result.go:68 +0x1f5

goroutine 17341 [chan receive (nil chan)]:
github.com/docker/buildx/build.NewContainer.func1.1.1()
	github.com/docker/buildx/build/invoke.go:36 +0x32
created by github.com/docker/buildx/build.NewContainer.func1.1
	github.com/docker/buildx/build/invoke.go:35 +0x134

goroutine 17418 [semacquire]:
sync.runtime_Semacquire(0xc000974d00?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775001?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2b00)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0004f3ea0}, {{0x2668b60, 0xc00072fe00}, 0xc0005dbd10, {0x1ebeae0, 0xc0008309b0}, 0xc000c16360, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17269 [select]:
google.golang.org/grpc/internal/transport.(*recvBufferReader).readClient(0xc000db17c0, {0xc000a26d90, 0x5, 0x5})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:195 +0xa5
google.golang.org/grpc/internal/transport.(*recvBufferReader).Read(0xc000db17c0, {0xc000a26d90?, 0xc000669b00?, 0xc00092e9c8?})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:175 +0x147
google.golang.org/grpc/internal/transport.(*transportReader).Read(0xc0004992c0, {0xc000a26d90?, 0xc00092ea40?, 0xc93bc7?})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:495 +0x32
io.ReadAtLeast({0x2661dc0, 0xc0004992c0}, {0xc000a26d90, 0x5, 0x5}, 0x5)
	io/io.go:332 +0x9a
io.ReadFull(...)
	io/io.go:351
google.golang.org/grpc/internal/transport.(*Stream).Read(0xc000566d80, {0xc000a26d90, 0x5, 0x5})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:479 +0xac
google.golang.org/grpc.(*parser).recvMsg(0xc000a26d80, 0x1000000)
	google.golang.org/grpc@v1.53.0/rpc_util.go:561 +0x47
google.golang.org/grpc.recvAndDecompress(0xc0014c7a80?, 0xc000566d80, {0x0, 0x0}, 0x1000000, 0x0, {0x0, 0x0})
	google.golang.org/grpc@v1.53.0/rpc_util.go:692 +0x66
google.golang.org/grpc.recv(0xc00092ec60?, {0x7ff069a45d00, 0x37ab9a0}, 0x7ff0695bc768?, {0x0?, 0x0?}, {0x22833e0, 0xc0015b2580}, 0x0?, 0x0, ...)
	google.golang.org/grpc@v1.53.0/rpc_util.go:758 +0x6e
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0014e9380, {0x22833e0?, 0xc0015b2580}, 0x416030?)
	google.golang.org/grpc@v1.53.0/stream.go:1060 +0x2cc
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0x7ff090dcf878?)
	google.golang.org/grpc@v1.53.0/stream.go:900 +0x25
google.golang.org/grpc.(*clientStream).withRetry(0xc000566240, 0xc00092ee88, 0xc00092ee58)
	google.golang.org/grpc@v1.53.0/stream.go:735 +0x3be
google.golang.org/grpc.(*clientStream).RecvMsg(0xc000566240, {0x22833e0?, 0xc0015b2580?})
	google.golang.org/grpc@v1.53.0/stream.go:899 +0x125
github.com/moby/buildkit/frontend/gateway/pb.(*lLBBridgeExecProcessClient).Recv(0xc000a24160)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/pb/gateway.pb.go:2962 +0x4c
github.com/moby/buildkit/frontend/gateway/grpcclient.(*messageForwarder).Start.func2.1()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:654 +0x44
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17416 [select]:
io.(*pipe).read(0xc0010f5e00, {0xc0009a9000, 0x1000, 0x1000?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0xc0001570f0?, {0xc0009a9000?, 0x231c548?, 0x1000?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17364 [semacquire]:
sync.runtime_Semacquire(0xc000975520?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24b01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2c40)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0005dbf40}, {{0x2668b60, 0xc0003c3380}, 0xc0015be000, {0x1ebeae0, 0xc000830d80}, 0xc0005d1d58, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17410 [select]:
github.com/moby/buildkit/frontend/gateway/grpcclient.(*procMessageForwarder).Recv(0xc0007208a0, {0x267f4b0?, 0xc0004f3c70?})
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:589 +0x9a
github.com/moby/buildkit/frontend/gateway/grpcclient.(*container).Start.func4()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:923 +0xb2
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17343 [chan receive]:
github.com/moby/buildkit/frontend/gateway/grpcclient.(*container).Start.func1()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:876 +0x28
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17444 [semacquire]:
sync.runtime_Semacquire(0xc000b829c0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24f01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbda00)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e050}, {{0x2668b60, 0xc0003cc960}, 0xc000a3e0f0, {0x1ebeae0, 0xc000a25130}, 0xc000a32288, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17431 [semacquire]:
sync.runtime_Semacquire(0xc000b82ea0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24d01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000b18000)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e6050}, {{0x2668b60, 0xc000938510}, 0xc000f86000, {0x1ebeae0, 0xc000834100}, 0xc0009f0000, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17400 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc001576de0)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 15266 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcb01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000cbe050}, {{0x2668b60, 0xc000cc8000}, 0xc000cbe0f0, {0x1ebeae0, 0xc000864170}, 0xc000cd2018, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 266 [select]:
google.golang.org/grpc/internal/transport.(*Stream).waitOnHeader(0xc000466360)
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:328 +0x7c
google.golang.org/grpc/internal/transport.(*Stream).RecvCompress(...)
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:343
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0001624e0, {0x2201620?, 0xc0005ba780}, 0x7ff069a45d00?)
	google.golang.org/grpc@v1.53.0/stream.go:1046 +0xc5
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0x0?)
	google.golang.org/grpc@v1.53.0/stream.go:900 +0x25
google.golang.org/grpc.(*clientStream).withRetry(0xc000466000, 0xc000c15a38, 0xc000c15a08)
	google.golang.org/grpc@v1.53.0/stream.go:751 +0x144
google.golang.org/grpc.(*clientStream).RecvMsg(0xc000466000, {0x2201620?, 0xc0005ba780?})
	google.golang.org/grpc@v1.53.0/stream.go:899 +0x125
google.golang.org/grpc.invoke({0x267f4b0?, 0xc00047f900?}, {0x2339108?, 0x416030?}, {0x2287b20, 0xc000a1e3c0}, {0x2201620, 0xc0005ba780}, 0xc000934c08?, {0xc0007a4440, ...})
	google.golang.org/grpc@v1.53.0/call.go:73 +0xd7
github.com/moby/buildkit/util/grpcerrors.UnaryClientInterceptor({0x267f4b0?, 0xc00047f900?}, {0x2339108?, 0x7ff0695d9288?}, {0x2287b20?, 0xc000a1e3c0?}, {0x2201620?, 0xc0005ba780?}, 0x0?, 0x243c570, ...)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/util/grpcerrors/intercept.go:41 +0x84
google.golang.org/grpc.(*ClientConn).Invoke(0x7ff0696d93c8?, {0x267f4b0?, 0xc00047f900?}, {0x2339108?, 0xc000a1e3c0?}, {0x2287b20?, 0xc000a1e3c0?}, {0x2201620?, 0xc0005ba780?}, {0x0, ...})
	google.golang.org/grpc@v1.53.0/call.go:35 +0x223
github.com/moby/buildkit/api/services/control.(*controlClient).Solve(0xc000934da0, {0x267f4b0, 0xc00047f900}, 0xc000672280?, {0x0, 0x0, 0x0})
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/api/services/control/control.pb.go:2208 +0xc9
github.com/moby/buildkit/client.(*Client).solve.func2()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/solve.go:258 +0x725
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 267 [chan receive]:
github.com/docker/buildx/build.getResultAt.func2.1({0x267f4e8?, 0xc000054100?}, {0x2683be0, 0xc000796400})
	github.com/docker/buildx/build/result.go:119 +0x33a
github.com/moby/buildkit/frontend/gateway/grpcclient.(*grpcClient).Run(0xc000796400, {0x267f4e8, 0xc000054100}, 0xc000720ce0)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:214 +0x1bb
github.com/moby/buildkit/client.(*Client).Build.func2({0xc000a1ac61, 0x19}, 0xc000243810, 0x265bf20?)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/build.go:59 +0x3cc
github.com/moby/buildkit/client.(*Client).solve.func3()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/solve.go:283 +0x5b
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 268 [select]:
google.golang.org/grpc/internal/transport.(*recvBufferReader).readClient(0xc00047fef0, {0xc0004758e8, 0x5, 0x5})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:195 +0xa5
google.golang.org/grpc/internal/transport.(*recvBufferReader).Read(0xc00047fef0, {0xc0004758e8?, 0xc000120678?, 0xc00017f9b8?})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:175 +0x147
google.golang.org/grpc/internal/transport.(*transportReader).Read(0xc000670c60, {0xc0004758e8?, 0xc00017fa30?, 0xc93bc7?})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:495 +0x32
io.ReadAtLeast({0x2661dc0, 0xc000670c60}, {0xc0004758e8, 0x5, 0x5}, 0x5)
	io/io.go:332 +0x9a
io.ReadFull(...)
	io/io.go:351
google.golang.org/grpc/internal/transport.(*Stream).Read(0xc00014dd40, {0xc0004758e8, 0x5, 0x5})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:479 +0xac
google.golang.org/grpc.(*parser).recvMsg(0xc0004758d8, 0x1000000)
	google.golang.org/grpc@v1.53.0/rpc_util.go:561 +0x47
google.golang.org/grpc.recvAndDecompress(0xc000712420?, 0xc00014dd40, {0x0, 0x0}, 0x1000000, 0x0, {0x0, 0x0})
	google.golang.org/grpc@v1.53.0/rpc_util.go:692 +0x66
google.golang.org/grpc.recv(0x4b64fa?, {0x7ff069a45d00, 0x37ab9a0}, 0x35?, {0x0?, 0x0?}, {0x2255240, 0xc000067f80}, 0xc000095cd0?, 0x0, ...)
	google.golang.org/grpc@v1.53.0/rpc_util.go:758 +0x6e
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0007904e0, {0x2255240?, 0xc000067f80}, 0x416030?)
	google.golang.org/grpc@v1.53.0/stream.go:1060 +0x2cc
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0x7ff06992aae8?)
	google.golang.org/grpc@v1.53.0/stream.go:900 +0x25
google.golang.org/grpc.(*clientStream).withRetry(0xc00014db00, 0xc00017fe78, 0xc00017fe48)
	google.golang.org/grpc@v1.53.0/stream.go:735 +0x3be
google.golang.org/grpc.(*clientStream).RecvMsg(0xc00014db00, {0x2255240?, 0xc000067f80?})
	google.golang.org/grpc@v1.53.0/stream.go:899 +0x125
github.com/moby/buildkit/api/services/control.(*controlStatusClient).Recv(0xc0009c9520)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/api/services/control/control.pb.go:2241 +0x4c
github.com/moby/buildkit/client.(*Client).solve.func4()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/solve.go:311 +0x112
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 269 [select]:
google.golang.org/grpc.newClientStreamWithParams.func4()
	google.golang.org/grpc@v1.53.0/stream.go:366 +0x92
created by google.golang.org/grpc.newClientStreamWithParams
	google.golang.org/grpc@v1.53.0/stream.go:365 +0xf2a

goroutine 270 [select]:
google.golang.org/grpc.newClientStreamWithParams.func4()
	google.golang.org/grpc@v1.53.0/stream.go:366 +0x92
created by google.golang.org/grpc.newClientStreamWithParams
	google.golang.org/grpc@v1.53.0/stream.go:365 +0xf2a

goroutine 271 [chan receive]:
github.com/moby/buildkit/session.serve.func1()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/session/grpc.go:25 +0x3b
created by github.com/moby/buildkit/session.serve
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/session/grpc.go:24 +0xdb

goroutine 17435 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbca01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e61e0}, {{0x2668b60, 0xc000938780}, 0xc000af54f0, {0x1ebeae0, 0xc001517ad0}, 0xc000a55aa0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 338 [select]:
google.golang.org/grpc/internal/transport.(*recvBufferReader).readClient(0xc00029c230, {0xc0004759d8, 0x5, 0x5})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:195 +0xa5
google.golang.org/grpc/internal/transport.(*recvBufferReader).Read(0xc00029c230, {0xc0004759d8?, 0xc000120690?, 0xc00017b810?})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:175 +0x147
google.golang.org/grpc/internal/transport.(*transportReader).Read(0xc000670f30, {0xc0004759d8?, 0xc00017b888?, 0xc93bc7?})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:495 +0x32
io.ReadAtLeast({0x2661dc0, 0xc000670f30}, {0xc0004759d8, 0x5, 0x5}, 0x5)
	io/io.go:332 +0x9a
io.ReadFull(...)
	io/io.go:351
google.golang.org/grpc/internal/transport.(*Stream).Read(0xc000980480, {0xc0004759d8, 0x5, 0x5})
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:479 +0xac
google.golang.org/grpc.(*parser).recvMsg(0xc0004759c8, 0x1000000)
	google.golang.org/grpc@v1.53.0/rpc_util.go:561 +0x47
google.golang.org/grpc.recvAndDecompress(0xc00017ba58?, 0xc000980480, {0x0, 0x0}, 0x1000000, 0x0, {0x0, 0x0})
	google.golang.org/grpc@v1.53.0/rpc_util.go:692 +0x66
google.golang.org/grpc.recv(0xd00000000000040?, {0x7ff069a45d00, 0x37ab9a0}, 0xc00017bae0?, {0x0?, 0x0?}, {0x2200ea0, 0xc000dbc940}, 0xc5a0e5?, 0x0, ...)
	google.golang.org/grpc@v1.53.0/rpc_util.go:758 +0x6e
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0007905b0, {0x2200ea0?, 0xc000dbc940}, 0xc00017bcd0?)
	google.golang.org/grpc@v1.53.0/stream.go:1060 +0x2cc
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0x0?)
	google.golang.org/grpc@v1.53.0/stream.go:900 +0x25
google.golang.org/grpc.(*clientStream).withRetry(0xc00014de60, 0xc00017bcd0, 0xc00017bca0)
	google.golang.org/grpc@v1.53.0/stream.go:735 +0x3be
google.golang.org/grpc.(*clientStream).RecvMsg(0xc00014de60, {0x2200ea0?, 0xc000dbc940?})
	google.golang.org/grpc@v1.53.0/stream.go:899 +0x125
github.com/moby/buildkit/session/grpchijack.(*conn).Read(0xc000243880, {0xc000442d60, 0x9, 0x7ff090dce5b8?})
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/session/grpchijack/dial.go:71 +0x1fe
io.ReadAtLeast({0x7ff069a49078, 0xc000243880}, {0xc000442d60, 0x9, 0x9}, 0x9)
	io/io.go:332 +0x9a
io.ReadFull(...)
	io/io.go:351
golang.org/x/net/http2.readFrameHeader({0xc000442d60?, 0x9?, 0xc000669bf0?}, {0x7ff069a49078?, 0xc000243880?})
	golang.org/x/net@v0.7.0/http2/frame.go:237 +0x6e
golang.org/x/net/http2.(*Framer).ReadFrame(0xc000442d20)
	golang.org/x/net@v0.7.0/http2/frame.go:498 +0x95
golang.org/x/net/http2.(*serverConn).readFrames(0xc000958480)
	golang.org/x/net@v0.7.0/http2/server.go:818 +0x91
created by golang.org/x/net/http2.(*serverConn).serve
	golang.org/x/net@v0.7.0/http2/server.go:930 +0x55c

goroutine 17409 [select]:
io.(*pipe).read(0xc0010f5c80, {0xc00140c000, 0x8000, 0xc001448748?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0xc0007209a0?, {0xc00140c000?, 0x1?, 0x8000?})
	io/pipe.go:136 +0x25
io.copyBuffer({0x26605e0, 0xc0007209a0}, {0x2662520, 0xc00066d338}, {0x0, 0x0, 0x0})
	io/io.go:427 +0x1b2
io.Copy(...)
	io/io.go:386
github.com/moby/buildkit/frontend/gateway/grpcclient.(*container).Start.func3()
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:901 +0xbf
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17443 [semacquire]:
sync.runtime_Semacquire(0xc000728680?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775301?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbd980)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000db1f90}, {{0x2668b10, 0xc0005ab0e0}, 0xc000a3e000, {0x1ebeae0, 0xc000a250c0}, 0xc00091aa80, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).Walk(...)
	github.com/docker/buildx/monitor/walker/walker.go:80
github.com/docker/buildx/monitor.RunMonitor.func10.5()
	github.com/docker/buildx/monitor/monitor.go:319 +0xcc
created by github.com/docker/buildx/monitor.RunMonitor.func10
	github.com/docker/buildx/monitor/monitor.go:318 +0x1fec

goroutine 17274 [semacquire]:
sync.runtime_Semacquire(0x40dbc8?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0x60?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0004d5b40)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/moby/buildkit/frontend/gateway/grpcclient.(*containerProcess).Wait(0xc000a24240?)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/frontend/gateway/grpcclient/client.go:1000 +0x79
github.com/docker/buildx/build.exec({0x267f4b0?, 0xc000db1860}, 0xc0003b3f60?, 0xc0009829c0?, {0x2668b88, 0xc000499320}, {0x266a258?, 0xc000774f98?}, {0x266a280, 0xc000774fb0}, ...)
	github.com/docker/buildx/build/invoke.go:149 +0x33b
github.com/docker/buildx/build.(*Container).Exec(0xc0003b3f18?, {0x267f4b0?, 0xc000db1860?}, 0xc0003b3f60?, {0x266a258?, 0xc000774f98?}, {0x266a280?, 0xc000774fb0?}, {0x266a280, 0xc000774fc0}, ...)
	github.com/docker/buildx/build/invoke.go:107 +0x125
github.com/docker/buildx/controller/processes.(*Manager).StartProcess.func2()
	github.com/docker/buildx/controller/processes/processes.go:166 +0xf6
created by github.com/docker/buildx/controller/processes.(*Manager).StartProcess
	github.com/docker/buildx/controller/processes/processes.go:164 +0x7ea

goroutine 17271 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc0007d1080)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 15253 [semacquire]:
sync.runtime_Semacquire(0xc000643040?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775101?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2e80)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000f86050}, {{0x2668b60, 0xc000b2e000}, 0xc0015be3c0, {0x1ebeae0, 0xc0008312f0}, 0xc000c16a20, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17433 [semacquire]:
sync.runtime_Semacquire(0xc000728b60?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000720f01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de2c0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e60f0}, {{0x2668b60, 0xc000938630}, 0xc0006e6190, {0x1ebeae0, 0xc000870f80}, 0xc000d79518, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17270 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc0007d1020)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 16888 [semacquire]:
sync.runtime_Semacquire(0xc000729040?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775101?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000e1c1c0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000af5720}, {{0x2668b60, 0xc0008869f0}, 0xc000af5770, {0x1ebeae0, 0xc001517c00}, 0xc0003b7800, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17432 [semacquire]:
sync.runtime_Semacquire(0xc0007291e0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de240)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e6050}, {{0x2668b60, 0xc000938570}, 0xc0006e60a0, {0x1ebeae0, 0xc000870e10}, 0xc001567140, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17272 [select]:
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward(0xc0007d10e0)
	github.com/docker/buildx/util/ioset/ioset.go:213 +0x168
created by github.com/docker/buildx/util/ioset.NewSingleForwarder
	github.com/docker/buildx/util/ioset/ioset.go:154 +0xca

goroutine 17366 [semacquire]:
sync.runtime_Semacquire(0xc000729520?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775101?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2d00)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be050}, {{0x2668b60, 0xc0003c3410}, 0xc0015be0a0, {0x1ebeae0, 0xc000830ed0}, 0xc000c16720, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17392 [select]:
io.(*pipe).read(0xc0010f5860, {0xc0006bf000, 0x1000, 0x406301?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x405d3d?, {0xc0006bf000?, 0xc000b1ef60?, 0xc85a01?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17420 [select]:
github.com/docker/buildx/build.getResultAt({0x267f4e8, 0xc000054108}, _, {{0x37ab9a0, 0x0, 0x0}, 0xc000887050, 0x0, {0xc00083d9c0, 0x19}, ...}, ...)
	github.com/docker/buildx/build/result.go:127 +0x37d
github.com/docker/buildx/build.GetResultAtFromResultContext(...)
	github.com/docker/buildx/build/result.go:57
github.com/docker/buildx/controller/local.(*localController).Continue(0xc0005658b0, {0x267f4e8, 0xc000054108}, {0x22ff949, 0x5}, 0x0?, {0x267f4e8?, 0xc000054108?}, {0x26826c0, 0xc000012020}, ...)
	github.com/docker/buildx/controller/local/controller.go:181 +0x172
github.com/docker/buildx/monitor.RunMonitor.func10.4({{0x2668b60, 0xc00072fe90}, 0xc0009dc000, {0x1ebeae0, 0xc00015deb0}, 0xc0008a29d8, {0x0, 0x0, 0x0}, 0x0})
	github.com/docker/buildx/monitor/monitor.go:307 +0x3a4
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0004f3f40}, {{0x2668b60, 0xc00072fe90}, 0xc0009dc000, {0x1ebeae0, 0xc00015deb0}, 0xc0008a29d8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:124 +0x5da
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17411 [select]:
github.com/docker/buildx/build.exec.func1()
	github.com/docker/buildx/build/invoke.go:129 +0x125
created by github.com/docker/buildx/build.exec
	github.com/docker/buildx/build/invoke.go:127 +0x325

goroutine 17413 [select]:
io.(*pipe).read(0xc001576900, {0xc0009a8000, 0x1000, 0x0?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x8?, {0xc0009a8000?, 0x0?, 0xc000d4ab58?})
	io/pipe.go:136 +0x25
bufio.(*Reader).fill(0xc0003b2f78)
	bufio/bufio.go:106 +0xff
bufio.(*Reader).ReadRune(0xc0003b2f78)
	bufio/bufio.go:300 +0x25
github.com/docker/buildx/util/ioset.traceReader.func1()
	github.com/docker/buildx/util/ioset/mux.go:198 +0x18f
created by github.com/docker/buildx/util/ioset.traceReader
	github.com/docker/buildx/util/ioset/mux.go:195 +0x1aa

goroutine 17275 [select]:
github.com/docker/buildx/controller/processes.(*Process).ForwardIO.func1()
	github.com/docker/buildx/controller/processes/processes.go:46 +0xe5
created by github.com/docker/buildx/controller/processes.(*Process).ForwardIO
	github.com/docker/buildx/controller/processes/processes.go:44 +0x165

goroutine 17276 [select]:
io.(*pipe).read(0xc0007d0fc0, {0xc000dc6000, 0x1000, 0xc00130e001?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0xc5e77d?, {0xc000dc6000?, 0xc0007f2718?, 0xc85a75?})
	io/pipe.go:136 +0x25
github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward.func1()
	github.com/docker/buildx/util/ioset/ioset.go:173 +0xe6
created by github.com/docker/buildx/util/ioset.(*SingleForwarder).doForward
	github.com/docker/buildx/util/ioset/ioset.go:169 +0x10b

goroutine 17414 [select]:
io.(*pipe).read(0xc0010f5da0, {0xc000496e40, 0x100, 0x10?})
	io/pipe.go:57 +0xb1
io.(*PipeReader).Read(0x0?, {0xc000496e40?, 0xc000494240?, 0xc000d150c0?})
	io/pipe.go:136 +0x25
golang.org/x/term.(*Terminal).readLine(0xc000496d80)
	golang.org/x/term@v0.5.0/terminal.go:789 +0x2e9
golang.org/x/term.(*Terminal).ReadLine(0x267f4e8?)
	golang.org/x/term@v0.5.0/terminal.go:716 +0x96
github.com/docker/buildx/monitor.RunMonitor.func10()
	github.com/docker/buildx/monitor/monitor.go:148 +0x425
created by github.com/docker/buildx/monitor.RunMonitor
	github.com/docker/buildx/monitor/monitor.go:139 +0x1272

goroutine 17446 [semacquire]:
sync.runtime_Semacquire(0xc000c04b60?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775301?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbdac0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e140}, {{0x2668b60, 0xc0003cc9f0}, 0xc000a3e190, {0x1ebeae0, 0xc000a251a0}, 0xc00091ac00, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17447 [semacquire]:
sync.runtime_Semacquire(0xc000c04d00?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24f01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbdb40)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e1e0}, {{0x2668b60, 0xc0003cca20}, 0xc000a3e280, {0x1ebeae0, 0xc000a25210}, 0xc000a322e8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17448 [semacquire]:
sync.runtime_Semacquire(0xc000c04ea0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24e01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de180)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e2d0}, {{0x2668b60, 0xc0003cca80}, 0xc0006e6000, {0x1ebeae0, 0xc000870cd0}, 0xc0015670e0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17449 [semacquire]:
sync.runtime_Semacquire(0xc000c05040?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbdc00)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e2d0}, {{0x2668b60, 0xc0003ccab0}, 0xc000a3e320, {0x1ebeae0, 0xc000a25280}, 0xc00091ad80, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17450 [semacquire]:
sync.runtime_Semacquire(0xc000c051e0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000721001?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbdc80)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e370}, {{0x2668b60, 0xc0003ccb10}, 0xc000a3e410, {0x1ebeae0, 0xc000a252f0}, 0xc000a32348, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17451 [semacquire]:
sync.runtime_Semacquire(0xc000c05380?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2bc0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e460}, {{0x2668b60, 0xc0003ccb70}, 0xc0005dbef0, {0x1ebeae0, 0xc000830c00}, 0xc0005d1ce0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17452 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbca01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e460}, {{0x2668b60, 0xc0003ccba0}, 0xc000af5400, {0x1ebeae0, 0xc001517a80}, 0xc000a55a88, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17453 [semacquire]:
sync.runtime_Semacquire(0xc000c056c0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24d01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbddc0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e460}, {{0x2668b60, 0xc0003ccbd0}, 0xc000a3e500, {0x1ebeae0, 0xc000a25380}, 0xc000a323a8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17454 [semacquire]:
sync.runtime_Semacquire(0xc000c05860?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbdec0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e550}, {{0x2668b60, 0xc0003ccc30}, 0xc000a3e6e0, {0x1ebeae0, 0xc000a25450}, 0xc000a32408, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17455 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbca01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e550}, {{0x2668b60, 0xc0003ccc60}, 0xc000a3e5f0, {0x1ebeae0, 0xc000a25400}, 0xc000a323f0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17436 [semacquire]:
sync.runtime_Semacquire(0xc000b83d40?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24d01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de400)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e61e0}, {{0x2668b60, 0xc0009387b0}, 0xc0006e6280, {0x1ebeae0, 0xc000871160}, 0xc000d79578, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17367 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcc01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be0f0}, {{0x2668b60, 0xc0003c3470}, 0xc0015be190, {0x1ebeae0, 0xc000831000}, 0xc0005d1e00, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17456 [semacquire]:
sync.runtime_Semacquire(0xc000c05ba0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24b01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000dbdf40)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e730}, {{0x2668b60, 0xc0003cccc0}, 0xc000a3e7d0, {0x1ebeae0, 0xc000a254c0}, 0xc000a32438, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17437 [semacquire]:
sync.runtime_Semacquire(0xc0009824e0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de500)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e62d0}, {{0x2668b60, 0xc000938810}, 0xc0006e6460, {0x1ebeae0, 0xc000871440}, 0xc000d795d8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17438 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbca01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e62d0}, {{0x2668b60, 0xc000938840}, 0xc0006e6370, {0x1ebeae0, 0xc000871360}, 0xc000d795c0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17368 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcb01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be280}, {{0x2668b60, 0xc0003c34d0}, 0xc0015be320, {0x1ebeae0, 0xc000831220}, 0xc0005d1e30, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17457 [semacquire]:
sync.runtime_Semacquire(0xc000c05d40?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775001?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000cc2000)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e820}, {{0x2668b60, 0xc0003ccd20}, 0xc000cbe000, {0x1ebeae0, 0xc000864030}, 0xc000cc0000, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17458 [semacquire]:
sync.runtime_Semacquire(0xc0005836c0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775101?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000a42000)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e820}, {{0x2668b60, 0xc0003ccd50}, 0xc000a3e870, {0x1ebeae0, 0xc000a25530}, 0xc00091b380, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17421 [chan receive]:
github.com/docker/buildx/build.getResultAt.func1()
	github.com/docker/buildx/build/result.go:70 +0x6d
created by github.com/docker/buildx/build.getResultAt
	github.com/docker/buildx/build/result.go:68 +0x1f5

goroutine 17439 [semacquire]:
sync.runtime_Semacquire(0xc0009836c0?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24b01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de580)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e64b0}, {{0x2668b60, 0xc0009388a0}, 0xc0006e6550, {0x1ebeae0, 0xc000871590}, 0xc000d79608, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17422 [select]:
google.golang.org/grpc/internal/transport.(*Stream).waitOnHeader(0xc000467440)
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:328 +0x7c
google.golang.org/grpc/internal/transport.(*Stream).RecvCompress(...)
	google.golang.org/grpc@v1.53.0/internal/transport/transport.go:343
google.golang.org/grpc.(*csAttempt).recvMsg(0xc0005c65b0, {0x22014e0?, 0xc0004d5e80}, 0x7ff069a45d00?)
	google.golang.org/grpc@v1.53.0/stream.go:1046 +0xc5
google.golang.org/grpc.(*clientStream).RecvMsg.func1(0x0?)
	google.golang.org/grpc@v1.53.0/stream.go:900 +0x25
google.golang.org/grpc.(*clientStream).withRetry(0xc000467200, 0xc000ad96b8, 0xc000ad9688)
	google.golang.org/grpc@v1.53.0/stream.go:751 +0x144
google.golang.org/grpc.(*clientStream).RecvMsg(0xc000467200, {0x22014e0?, 0xc0004d5e80?})
	google.golang.org/grpc@v1.53.0/stream.go:899 +0x125
google.golang.org/grpc.invoke({0x267f4e8?, 0xc000054100?}, {0x2349068?, 0x0?}, {0x22013a0, 0xc0004d5e40}, {0x22014e0, 0xc0004d5e80}, 0x0?, {0xc0007a4440, ...})
	google.golang.org/grpc@v1.53.0/call.go:73 +0xd7
github.com/moby/buildkit/util/grpcerrors.UnaryClientInterceptor({0x267f4e8?, 0xc000054100?}, {0x2349068?, 0x7ff0695baaa8?}, {0x22013a0?, 0xc0004d5e40?}, {0x22014e0?, 0xc0004d5e80?}, 0x0?, 0x243c570, ...)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/util/grpcerrors/intercept.go:41 +0x84
google.golang.org/grpc.(*ClientConn).Invoke(0x7ff0695baaa8?, {0x267f4e8?, 0xc000054100?}, {0x2349068?, 0xc0004d5e40?}, {0x22013a0?, 0xc0004d5e40?}, {0x22014e0?, 0xc0004d5e80?}, {0x0, ...})
	google.golang.org/grpc@v1.53.0/call.go:35 +0x223
github.com/moby/buildkit/api/services/control.(*controlClient).ListWorkers(0xc000930a00, {0x267f4e8, 0xc000054100}, 0x37a56f0?, {0x0, 0x0, 0x0})
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/api/services/control/control.pb.go:2280 +0xc9
github.com/moby/buildkit/client.(*Client).ListWorkers(0xc000434ab0, {0x267f4e8, 0xc000054100}, {0x0, 0x0, 0x0?})
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/workers.go:31 +0x14c
github.com/moby/buildkit/client.(*Client).Build(0xc000434ab0, {0x267f4e8?, _}, {{0x37ab9a0, 0x0, 0x0}, 0xc000887050, 0x0, {0xc00083d9c0, 0x19}, ...}, ...)
	github.com/moby/buildkit@v0.11.0-rc3.0.20230330090027-8b7bcb900d3c/client/build.go:31 +0x165
github.com/docker/buildx/build.getResultAt.func2()
	github.com/docker/buildx/build/result.go:94 +0x227
created by github.com/docker/buildx/build.getResultAt
	github.com/docker/buildx/build/result.go:88 +0x2df

goroutine 15254 [semacquire]:
sync.runtime_Semacquire(0xc000b66000?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775201?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc000b180c0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000f86050}, {{0x2668b60, 0xc000b2e030}, 0xc000f860a0, {0x1ebeae0, 0xc0008343c0}, 0xc0009f0180, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17459 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcc01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000a3e8c0}, {{0x2668b60, 0xc0003ccdb0}, 0xc000a3e960, {0x1ebeae0, 0xc000a255a0}, 0xc000a32498, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17440 [runnable]:
golang.org/x/sync/errgroup.(*Group).Go(0xc001346000, 0xc001346040)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0x5a
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e65a0}, {{0x2668b60, 0xc000938900}, 0xc001342000, {0x1ebeae0, 0xc00021ac60}, 0xc001344000, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:87 +0x16a
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17473 [semacquire]:
sync.runtime_Semacquire(0xc000983a00?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000775101?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0006de640)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e65a0}, {{0x2668b60, 0xc000938930}, 0xc0006e65f0, {0x1ebeae0, 0xc000871700}, 0xc0015677a0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17474 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcc01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0006e6640}, {{0x2668b60, 0xc000938990}, 0xc0006e66e0, {0x1ebeae0, 0xc000871870}, 0xc000d79668, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 15255 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbd101?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000f860f0}, {{0x2668b60, 0xc000b2e060}, 0xc000f86190, {0x1ebeae0, 0xc000834520}, 0xc000b3e048, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17460 [sync.Mutex.Lock]:
sync.runtime_SemacquireMutex(0xc000dbcc01?, 0xc0?, 0xc0000ac250?)
	runtime/sema.go:77 +0x26
sync.(*Mutex).lockSlow(0xc000dbd968)
	sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	sync/mutex.go:90
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc000af57c0}, {{0x2668b60, 0xc0003cce10}, 0xc000a3ea50, {0x1ebeae0, 0xc000a25610}, 0xc000a324c8, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:95 +0x2b9
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17369 [semacquire]:
sync.runtime_Semacquire(0xc0015c0000?)
	runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0xc000a24c01?)
	sync/waitgroup.go:116 +0x4b
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2f00)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:53 +0x27
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be410}, {{0x2668b60, 0xc0003c3560}, 0xc0015be4b0, {0x1ebeae0, 0xc0008313d0}, 0xc0005d1e60, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17371 [runnable]:
golang.org/x/sync/errgroup.(*Group).Wait(0xc0015b2fc0)
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:52 +0x5a
github.com/docker/buildx/monitor/walker.(*Walker).walk(0xc000dbd940, {0x267f4b0, 0xc0015be500}, {{0x2668b60, 0xc0003c35f0}, 0xc0015be5a0, {0x1ebeae0, 0xc000831540}, 0xc0005d1ef0, {0x0, ...}, ...}, ...)
	github.com/docker/buildx/monitor/walker/walker.go:91 +0x277
github.com/docker/buildx/monitor/walker.(*Walker).walk.func1()
	github.com/docker/buildx/monitor/walker/walker.go:88 +0xbb
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

goroutine 17372 [runnable]:
golang.org/x/sync/errgroup.(*Group).Go.func1()
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72
created by golang.org/x/sync/errgroup.(*Group).Go
	golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa5

@ktock
Copy link
Collaborator Author

ktock commented Apr 18, 2023

Thank you for the reproducer. Fixed the patch not to panic.

@ktock ktock force-pushed the monitor-continue-r-r branch 4 times, most recently from c8bc942 to 2fed3fe Compare June 30, 2023 13:23
@ktock ktock marked this pull request as ready for review June 30, 2023 13:34
@ktock
Copy link
Collaborator Author

ktock commented Jun 30, 2023

Rebased.

ktock and others added 8 commits October 18, 2023 15:14
This commit adds BuildOptions.Debug that allows skipping the evaluation of the
ResultHandler. The ResultHandler is created without evaluated, so calling Build
API with this flag always returns an error with the reference ID of that
(errored) ResultHandler. Note that this state of ResultHandler doesn't contain
result nor error so any operation on that ResultHandler will result in an error.

Following commit will allow user to do further operations (e.g. evaluation of a
bulid) using the buildkit client held by that ResultHandler.

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
This commit adds Solve API to the controller. This receives a build definition,
performs that build using ResultHandler held by that session. After Solve
completes, the client can debug the result using other APIs including Invoke.
Note that the ResultHandle provided by Solve overwrites the ResultHandle
previously stored in that session (possibly generated by the past Build or Solve
API call).

Using this API, user can perform build-and-debugging loop on the same session.

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
This commit adds two fields to the response of Inspect API.

- Definition: Build definition of the first build executed by Build API.
- CurrentDefinition: Build definition of the latest build executed by Build or
  Solve API.

The client can use these information for debugging the build deeply.

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
Walker is an utility for inspecting and debugging each vertex in an LLB graph.

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
This commit adds a set of commands to monitor for enabling breakpoint debugger.
This is implemented based on the walker utility for step-by-step LLB inspection.
For each vertex and breakpoint, monitor calls Solve API so the user can enter to
the debugger container on each vertex for inspection.

User can enter to the breakpoint debugger mode by --invoke=debug-step flag.

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
This commit adds the IDE-integrated breakpoint debugger based on walker.
Now buildx provides DAP (Debug Adapter Protocol) API to IDEs so DAP-aware IDEs
can call buildx and allow users to perform breakpoint-based debugging on the
IDE's UI/UX.

Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
Signed-off-by: Kohei Tokunaga <ktokunaga.mail@gmail.com>
@ktock
Copy link
Collaborator Author

ktock commented Oct 18, 2023

rebased

@tonistiigi
Copy link
Member

tonistiigi commented Oct 20, 2023

@ktock Do you think walking the definitionOp from build result is enough for all the cases we would want to support in the DAP debugger or would we need to add some of the functionality directly to frontends. If not making the frontends understand DAP protocol itself then would it help to add some requests there that help buildx do the correct things on client side. We have the subrequests support in frontends so theoretically this can be added in backward compatible manner.

I also wonder what to do with frontend that chain multiple long builds (evaluate in the middle). With the current structure, we can only debug the result of the final solve request that was returned.

Another case would be when for example, I have Dockerfile with 2 stages. I add a breakpoint to the beginning of first stage but I have an error in the base image of the second stage. Now my build will fail before it ever gets to debugging although visually this was later in my code and I only want to debug the first stage atm. before getting to the second one. But because images need to be resolved before DefinitionOp can be created for build result then this needs to run first in frontend.

Is there a good way we could also show the LLB operations that do not map directly to the source code but still participate in the execution path? Maybe a "fake" source file to LLB definition (like gdb shows machine code if no source I believe).

What should the "call stack" mean in our case? Should we put the whole LLB parent chain there? I guess that we have multiple inputs for steps is problematic for this data structure as well. I haven't fully investigated what are all the capabilities in DAP (or vscode extension).

Is there a point in trying to combine the "Buildx Interactive Debugger" command and monitor mode commands or are they completely different?

I think this should also be part of buildx repo or maybe we can introduce a VS Code extension for buildx with support for other features as well?

What do you mean by "other features" in here. Generally, I agree on taking the extension under buildx umbrella, but we can do that after the quick prototype phase.

@ktock
Copy link
Collaborator Author

ktock commented Oct 23, 2023

chain multiple long builds

So far I haven't encountered this kind of problems for Dockerfile debugging but if we want to handle this case (e.g. for non-Dockerfile sources?), then I think walker needs to be implemented in the frontend. To make DAP server work on that frontend, it needs to provide breakpoint-related APIs like implemented by the current walker.Controller.

a "fake" source file to LLB definition

SGTM.

What should the "call stack" mean in our case? Should we put the whole LLB parent chain there? I guess that we have multiple inputs for steps is problematic for this data structure as well. I haven't fully investigated what are all the capabilities in DAP (or vscode extension).

I'm not sure LLB has "call stack" as it doesn't have stack nor call instruction. Some frontends (e.g. HLB) seem to have their own "function" feature so maybe these source languages have their own definition of call stack?

Is there a point in trying to combine the "Buildx Interactive Debugger" command and monitor mode commands or are they completely different?

I've added the interactive debugger to monitor because both of them are debugging-related features. But having the interactive debugger as a separated CLI/subcommand sounds also ok to me.

"other features"

I don't have a concrete proposal for this as of now but what this patch doesn't cover is LSP-based extensions. (But there are already LSP extensions for Dockerfile in community so I'm not sure if there are unique features we can provide.)

@tonistiigi
Copy link
Member

To make DAP server work on that frontend, it needs to provide breakpoint-related APIs like implemented by the current walker.Controller.

I was thinking something like:

  • New buildkit exposes that it has a debug capability on the grpc protobuf API. If such cap is detected client can ask "build in debug mode"
  • When such frontend is started it runs normally, except when it makes llbBridge calls to Solve/ResolveImageConfig these would stop in BuildKit before the sent back to frontend. Now client is sent the ref for the intermediate graph. It can debug it and eventually it will send some continue signal to buildkit. That would release the result being sent to frontend and it can continue processing it.
  • I think this should work with just a BuildKit update. No frontend updates needed. Frontend just needs to provide the source mappings. There are some other things in DAP though that I need to look into more (completions, expressions, setting breakpoints by expression) that might need functions implemented by frontend. There is also a way to detect if line can have a breakpoint that looks quite useful. With single-shot builds we could detect this from LLB based on source mapping but for the chained scenario, I don't think it is possible without frontend changes.

I guess in this blocked mode all solves should be serial as well and not run in parallel.

I'm not sure LLB has "call stack" as it doesn't have stack nor call instruction. Some frontends (e.g. HLB) seem to have their own "function" feature so maybe these source languages have their own definition of call stack?

Technically every stage in Dockerfile could be a separate debug thread and all serial commands in a stage could be part of the stack. Maybe this is too much information though.

Otoh step-over should go next line in Dockerfile, step-in could go to the first command of the inner stage for commands like COPY --from=. Backwards movement could be supported as well. I don't think we can support variable modifications as that would mean generating new LLB (unless we do whole rebuild).

patch doesn't cover is LSP-based extensions.

Are these directly related to debugger? Some examples what you think in here?


Question: in a classical debugger, breakpoint in a line runs before that line runs. In Dockerfile I think both cases could make sense. Eg. if I have a line like RUN --mount=from=foo,target=/foo mycmd (or even COPY --from=foo /abc /def) if I add a breakpoint to that line in order to run debug container in that place I think I would expect to get to the shell where /foo is already mounted or /def copied. The problem is also about how to debug the last line of the stage. I think one of the most common cases is to get a debug container from the end of the stage, to prototype with new commands that would eventually be added to that stage.

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

Successfully merging this pull request may close these issues.

None yet

4 participants