Skip to content

Commit eb4aeed

Browse files
author
Mrunal Patel
authored
Merge pull request opencontainers#2038 from imxyb/defer-destroy
`r.destroy` can defer exec in `runner.run` method.
2 parents 2484581 + da5a2dd commit eb4aeed

File tree

1 file changed

+9
-13
lines changed

1 file changed

+9
-13
lines changed

utils_linux.go

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,17 @@ type runner struct {
269269
}
270270

271271
func (r *runner) run(config *specs.Process) (int, error) {
272-
if err := r.checkTerminal(config); err != nil {
273-
r.destroy()
272+
var err error
273+
defer func() {
274+
if err != nil {
275+
r.destroy()
276+
}
277+
}()
278+
if err = r.checkTerminal(config); err != nil {
274279
return -1, err
275280
}
276281
process, err := newProcess(*config, r.init, r.logLevel)
277282
if err != nil {
278-
r.destroy()
279283
return -1, err
280284
}
281285
if len(r.listenFDs) > 0 {
@@ -284,21 +288,18 @@ func (r *runner) run(config *specs.Process) (int, error) {
284288
}
285289
baseFd := 3 + len(process.ExtraFiles)
286290
for i := baseFd; i < baseFd+r.preserveFDs; i++ {
287-
_, err := os.Stat(fmt.Sprintf("/proc/self/fd/%d", i))
291+
_, err = os.Stat(fmt.Sprintf("/proc/self/fd/%d", i))
288292
if err != nil {
289-
r.destroy()
290293
return -1, errors.Wrapf(err, "please check that preserved-fd %d (of %d) is present", i-baseFd, r.preserveFDs)
291294
}
292295
process.ExtraFiles = append(process.ExtraFiles, os.NewFile(uintptr(i), "PreserveFD:"+strconv.Itoa(i)))
293296
}
294297
rootuid, err := r.container.Config().HostRootUID()
295298
if err != nil {
296-
r.destroy()
297299
return -1, err
298300
}
299301
rootgid, err := r.container.Config().HostRootGID()
300302
if err != nil {
301-
r.destroy()
302303
return -1, err
303304
}
304305
var (
@@ -310,7 +311,6 @@ func (r *runner) run(config *specs.Process) (int, error) {
310311
handler := newSignalHandler(r.enableSubreaper, r.notifySocket)
311312
tty, err := setupIO(process, rootuid, rootgid, config.Terminal, detach, r.consoleSocket)
312313
if err != nil {
313-
r.destroy()
314314
return -1, err
315315
}
316316
defer tty.Close()
@@ -326,23 +326,19 @@ func (r *runner) run(config *specs.Process) (int, error) {
326326
panic("Unknown action")
327327
}
328328
if err != nil {
329-
r.destroy()
330329
return -1, err
331330
}
332-
if err := tty.waitConsole(); err != nil {
331+
if err = tty.waitConsole(); err != nil {
333332
r.terminate(process)
334-
r.destroy()
335333
return -1, err
336334
}
337335
if err = tty.ClosePostStart(); err != nil {
338336
r.terminate(process)
339-
r.destroy()
340337
return -1, err
341338
}
342339
if r.pidFile != "" {
343340
if err = createPidFile(r.pidFile, process); err != nil {
344341
r.terminate(process)
345-
r.destroy()
346342
return -1, err
347343
}
348344
}

0 commit comments

Comments
 (0)