@@ -269,13 +269,17 @@ type runner struct {
269269}
270270
271271func (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