[Devel] [PATCH][cr-test] eclone-2 bug fix
Sukadev Bhattiprolu
sukadev at linux.vnet.ibm.com
Mon May 3 19:09:19 PDT 2010
From: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
Date: Mon, 3 May 2010 17:49:32 -0700
Subject: [PATCH 1/1] eclone-2 bug fix
When target-pid is in use, eclone() returns EBUSY, not EAGAIN. The
test passes now because eclone() correctly fails, but the test case
can do a better job of checking the errno.
Signed-off-by: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
---
eclone/eclone-2.c | 49 ++++++++++++++++++++++++-------------------------
1 files changed, 24 insertions(+), 25 deletions(-)
diff --git a/eclone/eclone-2.c b/eclone/eclone-2.c
index b825ac3..5550e43 100644
--- a/eclone/eclone-2.c
+++ b/eclone/eclone-2.c
@@ -64,14 +64,11 @@ static int do_eclone(int (*child_fn)(void *), void *child_arg,
fflush(stdout);
}
- if (rc < 0 && errno == EAGAIN) {
- printf("PASS: Unable to create a process with a pid that is "
- "in use\n");
- exit(0);
- } else {
- printf("ERROR: eclone(): rc %d, errno %d\n", rc, errno);
- return rc;
- }
+ if (rc < 0)
+ rc = -errno;
+
+ return rc;
+
}
int main()
@@ -90,27 +87,29 @@ int main()
pid = do_eclone(do_child, CHILD_ARG, flags, nr_pids, pids);
- if (verbose) {
- printf("[%d, %d]: Parent waiting for %d\n", getpid(),
- gettid(), pid);
+ if (pid == -EBUSY) {
+ printf("PASS: Unable to create a process with a pid that is "
+ "in use\n");
+ return 0;
+ } else if (pid < 0) {
+ printf("ERROR: eclone(): errno %d\n", pid);
+ return 1;
}
+ printf("[%d, %d]: Parent waiting for %d\n", getpid(), gettid(), pid);
+
rc = waitpid(pid, &status, __WALL);
- if (rc < 0) {
- printf("ERROR: ");
- verbose = 1;
- }
- if (verbose) {
- printf("\twaitpid(): child %d, rc %d, error %d, status 0x%x\n",
- getpid(), rc, errno, status);
- if (rc >=0) {
- if (WIFEXITED(status)) {
- printf("\t EXITED, %d\n", WEXITSTATUS(status));
- } else if (WIFSIGNALED(status)) {
- printf("\t SIGNALED, %d\n", WTERMSIG(status));
- }
+ printf("\twaitpid(): child %d, rc %d, error %d, status 0x%x\n",
+ getpid(), rc, errno, status);
+
+ if (rc >=0) {
+ if (WIFEXITED(status)) {
+ printf("\t EXITED, %d\n", WEXITSTATUS(status));
+ } else if (WIFSIGNALED(status)) {
+ printf("\t SIGNALED, %d\n", WTERMSIG(status));
}
}
- return 0;
+
+ return 1;
}
--
1.6.6.1
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list