On Mon, Dec 21, 2009 at 9:17 PM, Mitani <[email protected]> wrote: > > I revised patch into "WIFEXITED(status) && WEXITSTATUS(status) == 0", and > tried to test. > After that, "nanosleep" could work correctly. > I agree with your proposal. > > Thank you for your help! > > -Tomonori Mitani > > -----Original Message----- > From: Garrett Cooper [mailto:[email protected]] > Sent: Tuesday, December 22, 2009 11:45 AM > To: Mitani > Cc: [email protected] > Subject: Re: [LTP] "nanosleep{02~04}" testcase failed > > 2009/12/20 Mitani <[email protected]>: >> Hi, >> >> I found that "nanosleep{02~04}" testcase failed like follow example. >> ---------- >> nanosleep02 1 TFAIL : child process exited abnormally >> ---------- >> >> In ${LTPROOT}/testcases/kernel/syscalls/nanosleep/nanosleep{02~04}.c, >> WEXITSTATUS(status) is used to judge whether child process did exit >> normally. >> But WEXITSTATUS macro is used only when WIFEXITED macro returned "true". >> So, it cannot get the correct results and it terminated with the above >> error. >> >> To solve this problem, I thought that we had better use WIFEXITED macro >> instead of the WEXITSTATUS macro. >> Here are patches to fix these problem: >> ============ >> --- nanosleep02.c 2009-11-02 22:57:17.000000000 +0900 >> +++ nanosleep02.c.new 2009-12-21 14:15:19.000000000 +0900 >> @@ -162,10 +162,10 @@ >> >> /* Wait for child to execute */ >> wait(&status); >> - if (WEXITSTATUS(status) == 0) { >> + if (WIFEXITED(status)) { >> tst_resm(TPASS, "Functionality of nanosleep() " >> "is correct"); >> - } else if (WEXITSTATUS(status) == 1) { >> + } else if (!WIFEXITED(status)) { >> tst_resm(TFAIL, "child process exited abnormally"); >> } >> } /* End for TEST_LOOPING */ >> >> ============ >> >> ============ >> --- nanosleep03.c 2009-11-02 22:57:17.000000000 +0900 >> +++ nanosleep03.c.new 2009-12-21 15:03:52.000000000 +0900 >> @@ -143,10 +143,10 @@ >> >> /* Wait for child to execute */ >> wait(&status); >> - if (WEXITSTATUS(status) == 0) { >> + if (WIFEXITED(status)) { >> tst_resm(TPASS, "nanosleep() fails, interrupted" >> " by signal, error:%d", EINTR); >> - } else if (WEXITSTATUS(status) == 1) { >> + } else if (!WIFEXITED(status)) { >> tst_resm(TFAIL, "child process exited abnormally"); >> } >> } /* End for TEST_LOOPING */ >> >> ============ >> >> ============ >> --- nanosleep04.c 2009-11-02 22:57:17.000000000 +0900 >> +++ nanosleep04.c.new 2009-12-21 15:04:24.000000000 +0900 >> @@ -147,10 +147,10 @@ >> >> /* Wait for child to execute */ >> wait(&status); >> - if (WEXITSTATUS(status) == 0) { >> + if (WIFEXITED(status)) { >> tst_resm(TPASS, "nanosleep() fails, invalid pause " >> "time, error:%d", EINVAL); >> - } else if (WEXITSTATUS(status) == 1) { >> + } else if (!WIFEXITED(status)) { >> tst_resm(TFAIL, "child process exited abnormally"); >> } >> } /* End for TEST_LOOPING */ >> ============ > > I agree that the test's validation step is written incorrectly, as per > the wait(2) manpage: > > > WIFEXITED(status) > returns true if the child terminated normally, that is, by call- > ing exit(3) or _exit(2), or by returning from main(). > > WEXITSTATUS(status) > returns the exit status of the child. This consists of the > least significant 8 bits of the status argument that the child > specified in a call to exit(3) or _exit(2) or as the argument > for a return statement in main(). This macro should only be > employed if WIFEXITED returned true. > > in particular the precondition for calling WEXITSTATUS, but should > it be WIFEXITED(status) && WEXITSTATUS(status) == 0 => PASS, else > FAIL?
Committed -- thanks! -Garrett ------------------------------------------------------------------------------ This SF.Net email is sponsored by the Verizon Developer Community Take advantage of Verizon's best-in-class app development support A streamlined, 14 day to market process makes app distribution fast and easy Join now and get one step closer to millions of Verizon customers http://p.sf.net/sfu/verizon-dev2dev _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
