On Tue, Sep 8, 2009 at 11:49 PM, Subrata Modak<[email protected]> wrote: > On Wed, 2009-09-09 at 10:48 +0530, Suzuki Poulose wrote: >> Li Zefan wrote: >> > Suzuki Poulose wrote: >> >> Hi, >> >> >> >> There is a testcase issue in the event_generator code. The gen_fork() is >> >> called to generate the fork event. >> >> >> >> The child process prints the following message: >> >> >> >> static inline void gen_fork(void) >> >> { >> >> pid_t pid; >> >> int status; >> >> >> >> pid = fork(); >> >> if (pid == 0) { >> >> printf("fork parent: %d, child: %d\n", getppid(), >> >> getpid()); >> >> exit(0); >> >> } else if (pid < 0) { >> >> fprintf(stderr, "fork() failed\n"); >> >> exit(1); >> >> } >> >> } >> >> >> >> Now the parent process just exits after this call. So, if the child >> >> doesn't get to run before parent exits, the child will see the ppid as >> >> 1, that of INIT and this contradicts the actual data. Hence the test >> >> fails. >> >> >> >> Attached patch fixes the issue. I have verified the same. Please apply. >> >> >> > >> > Thanks for fixing it. >> > >> > Acked-by: Li Zefan <[email protected]> >> > >> > But you forgot to add your Signed-off-by in the patch. ;) >> > >> Ah! Thanks for catching that ! Re-attaching it ;) >> >> Thanks >> >> Suzuki >> plain text document attachment >> (connectors-gen_fork-wait-for-child.diff) >> gen_fork() event should wait until the child exits. Otherwise the child >> would see INIT as the parent and >> end up in collecting wrong information to compare with. >> >> >> Signed-off-by: Suzuki K P <[email protected]> > > Thanks. > > Regards-- > Subrata > >> Acked-by: Li Zefan <[email protected]> >> >> Index: ltp/testcases/kernel/connectors/pec/event_generator.c >> =================================================================== >> --- ltp.orig/testcases/kernel/connectors/pec/event_generator.c >> 2008-10-22 13:40:31.000000000 +0000 >> +++ ltp/testcases/kernel/connectors/pec/event_generator.c 2009-09-08 >> 13:52:14.000000000 +0000 >> @@ -25,6 +25,9 @@ >> #include <stdlib.h> >> #include <stdio.h> >> #include <pwd.h> >> +#include <sys/types.h> >> +#include <sys/wait.h> >> + >> #include "test.h" >> >> #define DEFAULT_EVENT_NUM 1 >> @@ -94,6 +97,7 @@ >> static inline void gen_fork(void) >> { >> pid_t pid; >> + int status; >> >> pid = fork(); >> if (pid == 0) { >> @@ -102,6 +106,8 @@ >> } else if (pid < 0) { >> fprintf(stderr, "fork() failed\n"); >> exit(1); >> + } else { /* Parent should wait for the child */ >> + wait(&status); >> } >> }
Sorry -- this really could have been done `better' with waitpid because you wouldn't need the extra status field. Thanks, -Garrett ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
