aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--internal/dbus/proc.go9
-rw-r--r--internal/dbus/proxy.go2
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