diff --git a/oz-daemon/daemon.go b/oz-daemon/daemon.go index 54dfb7c..a857635 100644 --- a/oz-daemon/daemon.go +++ b/oz-daemon/daemon.go @@ -52,11 +52,14 @@ func initialize() *daemonState { func (d *daemonState) handleChildExit(pid int, wstatus syscall.WaitStatus) { d.Debug("Child process pid=%d exited with status %d", pid, wstatus.ExitStatus()) + for _,sbox := range d.sandboxes { if sbox.init.Process.Pid == pid { - sbox.fs.Cleanup() + sbox.remove() + return } } + d.Notice("No sandbox found with oz-init pid = %d", pid) } func runServer(args ...interface{}) error { diff --git a/oz-daemon/launch.go b/oz-daemon/launch.go index 04a0a73..96c59c4 100644 --- a/oz-daemon/launch.go +++ b/oz-daemon/launch.go @@ -84,6 +84,18 @@ func (d *daemonState) launch(p *oz.Profile) (*Sandbox, error) { return sbox,nil } +func (sbox *Sandbox) remove() { + sboxes := []*Sandbox{} + for _,sb := range sbox.daemon.sandboxes { + if sb == sbox { + sb.fs.Cleanup() + } else { + sboxes = append(sboxes, sb) + } + } + sbox.daemon.sandboxes = sboxes +} + func (sbox *Sandbox) logMessages() { scanner := bufio.NewScanner(sbox.stderr) for scanner.Scan() {