diff options
author | Peter Hunt <pehunt@redhat.com> | 2020-03-02 14:42:48 -0500 |
---|---|---|
committer | Peter Hunt <pehunt@redhat.com> | 2020-03-03 15:35:35 -0500 |
commit | 4b72f9e4013411208751df2a92ab9f322d4da5b2 (patch) | |
tree | 21abdfa291eaca2da67b0115fa4eed93eaa5aaa7 /libpod/container_internal.go | |
parent | 3bc5f431d4df9724501a42a68e333f7e98a0b0cf (diff) | |
download | podman-4b72f9e4013411208751df2a92ab9f322d4da5b2.tar.gz podman-4b72f9e4013411208751df2a92ab9f322d4da5b2.tar.bz2 podman-4b72f9e4013411208751df2a92ab9f322d4da5b2.zip |
exec: get the exit code from sync pipe instead of file
Before, we were getting the exit code from the file, in which we waited an arbitrary amount of time (5 seconds) for the file, and segfaulted if we didn't find it. instead, we should be a bit more certain conmon has sent the exit code. Luckily, it sends the exit code along the sync pipe fd, so we can read it from there
Adapt the ExecContainer interface to pass along a channel to get the pid and exit code from conmon, to be able to read both from the pipe
Signed-off-by: Peter Hunt <pehunt@redhat.com>
Diffstat (limited to 'libpod/container_internal.go')
-rw-r--r-- | libpod/container_internal.go | 22 |
1 files changed, 0 insertions, 22 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go index ff43bfc8f..67e02cc31 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -206,28 +206,6 @@ func (c *Container) execOCILog(sessionID string) string { return filepath.Join(c.execBundlePath(sessionID), "oci-log") } -// readExecExitCode reads the exit file for an exec session and returns -// the exit code -func (c *Container) readExecExitCode(sessionID string) (int, error) { - exitFile := filepath.Join(c.execExitFileDir(sessionID), c.ID()) - chWait := make(chan error) - defer close(chWait) - - _, err := WaitForFile(exitFile, chWait, time.Second*5) - if err != nil { - return -1, err - } - ec, err := ioutil.ReadFile(exitFile) - if err != nil { - return -1, err - } - ecInt, err := strconv.Atoi(string(ec)) - if err != nil { - return -1, err - } - return ecInt, nil -} - // Wait for the container's exit file to appear. // When it does, update our state based on it. func (c *Container) waitForExitFileAndSync() error { |