summaryrefslogtreecommitdiffhomepage
path: root/runsc/specutils/specutils.go
diff options
context:
space:
mode:
authorBrielle Broder <bbroder@google.com>2018-07-10 14:57:20 -0700
committerShentubot <shentubot@google.com>2018-07-10 14:58:12 -0700
commitb763b3992a2c4f16fc218e1920df5525dd75b114 (patch)
tree6c67d6947e29388b83943dffd24dd07d28754597 /runsc/specutils/specutils.go
parent06920b3d1bb6346a20aa0e154b14e68116919dbc (diff)
Modified error message for clarity.
Previously, error message only showed "<nil>" when child and pid were the same (since no error is returned by the Wait4 syscall in this case) which occurs when the process has incorrectly terminated. A new error message was added to improve clarity for such a case. Tests for this function were modified to reflect the improved distinction between process termination and error. PiperOrigin-RevId: 204018107 Change-Id: Ib38481c9590405e5bafcb6efe27fd49b3948910c
Diffstat (limited to 'runsc/specutils/specutils.go')
-rw-r--r--runsc/specutils/specutils.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/runsc/specutils/specutils.go b/runsc/specutils/specutils.go
index 34243e623..861e7fd70 100644
--- a/runsc/specutils/specutils.go
+++ b/runsc/specutils/specutils.go
@@ -324,9 +324,14 @@ func WaitForReady(pid int, timeout time.Duration, ready func() (bool, error)) er
// Check if the process is still running.
var ws syscall.WaitStatus
var ru syscall.Rusage
+
+ // If the process is alive, child is 0 because of the NOHANG option.
+ // If the process has terminated, child equals the process id.
child, err := syscall.Wait4(pid, &ws, syscall.WNOHANG, &ru)
- if err != nil || child == pid {
- return fmt.Errorf("process (%d) is not running, err: %v", pid, err)
+ if err != nil {
+ return fmt.Errorf("error waiting for process: %v", err)
+ } else if child == pid {
+ return fmt.Errorf("process %d has terminated", pid)
}
// Process continues to run, backoff and retry.