cmd/mbf: optionally wait for cancel
All checks were successful
Test / Create distribution (push) Successful in 1m4s
Test / Sandbox (push) Successful in 2m45s
Test / Hakurei (push) Successful in 3m57s
Test / ShareFS (push) Successful in 3m57s
Test / Sandbox (race detector) (push) Successful in 5m36s
Test / Hakurei (race detector) (push) Successful in 9m26s
Test / Flake checks (push) Successful in 2m12s

Synchronisation is not needed here during interactive use.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-04-19 18:24:11 +09:00
parent f8902e3679
commit 753432cf09
3 changed files with 11 additions and 7 deletions

View File

@@ -305,6 +305,7 @@ func cancelRemote(
ctx context.Context, ctx context.Context,
addr *net.UnixAddr, addr *net.UnixAddr,
a pkg.Artifact, a pkg.Artifact,
wait bool,
) error { ) error {
done, conn, err := dial(ctx, addr) done, conn, err := dial(ctx, addr)
if err != nil { if err != nil {
@@ -323,9 +324,11 @@ func cancelRemote(
} else if n != len(id) { } else if n != len(id) {
return errors.Join(io.ErrShortWrite, conn.Close()) return errors.Join(io.ErrShortWrite, conn.Close())
} }
if wait {
if _, err = conn.Read(make([]byte, 1)); err == io.EOF { if _, err = conn.Read(make([]byte, 1)); err == io.EOF {
err = nil err = nil
} }
}
return errors.Join(err, conn.Close()) return errors.Join(err, conn.Close())
} }
@@ -333,6 +336,7 @@ func cancelRemote(
func abortRemote( func abortRemote(
ctx context.Context, ctx context.Context,
addr *net.UnixAddr, addr *net.UnixAddr,
wait bool,
) error { ) error {
done, conn, err := dial(ctx, addr) done, conn, err := dial(ctx, addr)
if err != nil { if err != nil {
@@ -341,7 +345,7 @@ func abortRemote(
defer close(done) defer close(done)
err = writeSpecialHeader(conn, specialAbort) err = writeSpecialHeader(conn, specialAbort)
if err == nil { if wait && err == nil {
if _, err = conn.Read(make([]byte, 1)); err == io.EOF { if _, err = conn.Read(make([]byte, 1)); err == io.EOF {
err = nil err = nil
} }

View File

@@ -106,11 +106,11 @@ func TestDaemon(t *testing.T) {
} }
}() }()
if err = cancelRemote(ctx, &addr, pkg.NewFile("nonexistent", nil)); err != nil { if err = cancelRemote(ctx, &addr, pkg.NewFile("nonexistent", nil), true); err != nil {
t.Fatalf("cancelRemote: error = %v", err) t.Fatalf("cancelRemote: error = %v", err)
} }
if err = abortRemote(ctx, &addr); err != nil { if err = abortRemote(ctx, &addr, true); err != nil {
t.Fatalf("abortRemote: error = %v", err) t.Fatalf("abortRemote: error = %v", err)
} }

View File

@@ -489,7 +489,7 @@ func main() {
cc, cancel := context.WithDeadline(context.Background(), daemonDeadline()) cc, cancel := context.WithDeadline(context.Background(), daemonDeadline())
defer cancel() defer cancel()
if _err := cancelRemote(cc, &addr, a); _err != nil { if _err := cancelRemote(cc, &addr, a, false); _err != nil {
log.Println(err) log.Println(err)
} }
} }
@@ -523,7 +523,7 @@ func main() {
c.NewCommand( c.NewCommand(
"abort", "abort",
"Abort all pending cures on the daemon", "Abort all pending cures on the daemon",
func([]string) error { return abortRemote(ctx, &addr) }, func([]string) error { return abortRemote(ctx, &addr, false) },
) )
{ {