client: fix deadlock when connect to buildkitd fails

Before this change, if BUILDKIT_HOST was set to an invalid value that
resulted in the connection of the grpc client to the server to fail,
then deadlock occured waiting for the `eventsCh` to be closed.

This happened because the call to the buildkit client's Build method
returned an error before the provided callback was executed, which is
where the `eventsCh` gets closed.

This change places the creation of `eventsCh` inside the Build callback,
which avoids the increment of the WaitGroup and thus the deadlock in
this error path.

Signed-off-by: Erik Sipsma <erik@sipsma.dev>
This commit is contained in:
Erik Sipsma
2022-04-07 17:23:54 -07:00
parent caf6e5896d
commit efa24a44a0
2 changed files with 16 additions and 6 deletions

View File

@@ -248,3 +248,13 @@ setup() {
assert_failure
assert_output --partial "no match for platform in manifest"
}
@test "plan/do: invalid BUILDKIT_HOST results in error" {
cd "$TESTDIR"
# ip address is in a reserved range that should be unroutable
export BUILDKIT_HOST=tcp://192.0.2.1:1234
run timeout 30 "$DAGGER" "do" -p ./plan/do/actions.cue test
assert_failure
assert_output --partial "Unavailable: connection error"
}