aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/dbus/proc.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-10-22 16:24:14 +0900
committerOphestra <cat@gensokyo.uk>2026-10-22 16:24:14 +0900
commit02c7ca8e849807130e732b9b639593f49dd5abc8 (patch)
treeb7b7f9f5e17c41f1786d25aecfa373eb90978f35 /internal/dbus/proc.go
parent1b1733b984a1481d29d747bf208029ceafd75564 (diff)
internal/dbus: add cleanup
This prevents leaking the test process in the test suite. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/dbus/proc.go')
-rw-r--r--internal/dbus/proc.go9
1 files changed, 9 insertions, 0 deletions
diff --git a/internal/dbus/proc.go b/internal/dbus/proc.go
index e7af8885..e74287b4 100644
--- a/internal/dbus/proc.go
+++ b/internal/dbus/proc.go
@@ -5,6 +5,7 @@ import (
"errors"
"os"
"os/exec"
+ "runtime"
"strconv"
"syscall"
@@ -45,8 +46,10 @@ func (p *Proxy) Start() error {
var toolPath *check.Absolute
if a, err := check.NewAbs(p.name); err != nil {
if p.name, err = exec.LookPath(p.name); err != nil {
+ cancel(err)
return err
} else if toolPath, err = check.NewAbs(p.name); err != nil {
+ cancel(err)
return err
}
} else {
@@ -55,6 +58,7 @@ func (p *Proxy) Start() error {
var libPaths []*check.Absolute
if entries, err := ldd.Resolve(ctx, p.msg, toolPath); err != nil {
+ cancel(err)
return err
} else {
libPaths = ldd.Path(entries)
@@ -130,9 +134,13 @@ func (p *Proxy) Start() error {
}
p.cancel, p.cause = cancel, func() error { return context.Cause(ctx) }
+ p.cleanup = runtime.AddCleanup(p, func(cancel context.CancelCauseFunc) {
+ cancel(proxyClosed)
+ }, p.cancel)
return nil
}
+// proxyClosed is the cancellation cause for a proxy closed via [Proxy.Close].
var proxyClosed = errors.New("proxy closed")
// Wait blocks until xdg-dbus-proxy exits and releases resources.
@@ -153,6 +161,7 @@ func (p *Proxy) Wait() error {
errors.Is(p.cause(), proxyClosed) {
errs[0] = nil
}
+ p.cleanup.Stop()
p.pmu.RUnlock()
// ensure socket removal so ephemeral directory is empty at revert