diff options
| -rw-r--r-- | internal/dbus/proc.go | 9 | ||||
| -rw-r--r-- | internal/dbus/proxy.go | 2 |
2 files changed, 11 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 diff --git a/internal/dbus/proxy.go b/internal/dbus/proxy.go index 9de49c41..891c0c52 100644 --- a/internal/dbus/proxy.go +++ b/internal/dbus/proxy.go @@ -3,6 +3,7 @@ package dbus import ( "context" "io" + "runtime" "sync" "syscall" @@ -24,6 +25,7 @@ type Proxy struct { cancel context.CancelCauseFunc cause func() error + cleanup runtime.Cleanup final *Final output io.Writer useSandbox bool |
