From: Crossover L. <cro...@gm...> - 2010-01-21 07:37:18
|
Oh, I got it. There is some confusion. 1) In hugeshmget01.c, setup() will call tst_sig(NOFORK, DEF_HANDLER, cleanup); 2) In include/test.h: /* defines for unexpected signal setup routine (set_usig.c) */ #define FORK 1 /* SIGCLD is to be ignored */ #define NOFORK 0 /* SIGCLD is to be caught */ so here, hugeshmget01 want to catch SIGCLD. 3) In lib/tst_gig.c: ... case SIGCLD: if (fork_flag == FORK || STD_COPIES > 1) continue; default: if (tst_setup_signal(sig, handler) == SIG_ERR) tst_resm(TWARN | TERRNO, "signal() failed for signal %d", sig); break; ... Here, if you donot use "-c Xnumber", the SIGCLD handler will be def_handler, which will rise "Unexpected signal %d received" when received signal SIGCLD But if you use "-c Xnumber", STD_COPIES > 1 will be true, so the handler to SIGCLD is default, "ignore". Confusion comes out: 1. tst_sig(NOFORK, DEF_HANDLER, cleanup); /* SIGCLD is to be caught */ 2. -c Xnumber will lead to SIGCLD ignored Although the results are normal, but the code itself can lead to confusion. So I suggest use the following patch: --- hugeshmget01.c 2009-11-20 00:05:21.000000000 +0800 +++ hugeshmget01_1.c 2010-01-21 08:41:56.350057513 +0800 @@ -160,7 +160,7 @@ setup(void) { /* capture signals */ - tst_sig(NOFORK, DEF_HANDLER, cleanup); + tst_sig(FORK, DEF_HANDLER, cleanup); /* Pause if that option was specified */ TEST_PAUSE; 2010/1/21 Crossover Lonely <cro...@gm...> > Hi, > I have tried "gdb ./hugeshmget01 -c 2" and "set follow-fork-mode > child". > Then I traced into the child thread, and got > "hugeshmget01 1 TBROK : Unexpected signal 17 received." > > > > 2010/1/21 liubo <liu...@cn...> > >> Hi, >> >> The hugeshmget01 case is designed for testing standard SYSV shared >> memory system calls "shmget", and it do need a few concurrent copies >> in order to fulfill a multi-process memory-allocated environment. >> >> IMO, "-c Xnumber" is needed. >> >> Thanks, >> Liu Bo >> >> >> >> On 01/21/2010 10:14 AM, Crossover Lonely wrote: >> >> It works! >> But isn't weird? Why just use ./hugeshmget won't work? >> I traced it, and found it calls tsg_sig() in setup(): >> tst_sig(NOFORK, DEF_HANDLER, cleanup); >> and in tsg_sig(): >> ... >> case SIGCLD: >> if (fork_flag == FORK || STD_COPIES > 1) >> continue; >> >> default: >> if (tst_setup_signal(sig, handler) == SIG_ERR) >> tst_resm(TWARN | TERRNO, >> "signal() failed for signal %d", sig); >> break; >> ... >> >> so here hugeshmget set its action to SIGCLD to handler - here is >> def_handler(), which can >> rise "Unexpected signal %d received." message when recived SIGCLD. >> static void def_handler(int sig) >> { >> /* >> * Break remaining test cases, do any cleanup, then exit >> */ >> tst_brkm(TBROK, 0, "Unexpected signal %d received.", sig); >> >> /* now cleanup and exit */ >> if (T_cleanup) >> (*T_cleanup) (); >> >> tst_exit(); >> } >> >> So I think it's better to correct it! >> >> Thanks and Best Regards, >> shenghui >> >> 2010/1/21 liubo <liu...@cn...> <liu...@cn...> >> >> Hi, >> >> In my box, I can add -c Xnumber to avoid the unexpect signal, >> for example, ./hugeshmget -c 10. Maybe you can try this as well. >> >> Thanks, >> Liu Bo >> >> >> On 01/21/2010 08:50 AM, Crossover Lonely wrote: >> >> For your convenience, I just made to patches against the signle file, not >> the whole directory. >> >> solution 1======================= >> --- hugeshmget01.c 2009-11-20 00:05:21.000000000 +0800 >> +++ hugeshmget01_2.c 2010-01-21 08:43:11.790533086 +0800 >> @@ -78,14 +78,14 @@ >> tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); >> } >> >> - setup(); /* global setup */ >> - >> /* The following loop checks looping state if -i option given */ >> if ( get_no_of_hugepages() <= 0 || hugepages_size() <= 0 ) >> tst_brkm(TBROK, cleanup, "Test cannot be continued owning to >> sufficient availability of Hugepages on the system"); >> else >> huge_pages_shm_to_be_allocated = ( get_no_of_hugepages() * >> hugepages_size() * 1024) / 2 ; >> >> + setup(); /* global setup */ >> + >> for (lc = 0; TEST_LOOPING(lc); lc++) { >> /* reset Tst_count in case we are looping */ >> Tst_count = 0; >> >> >> solution 2============================= >> = >> --- hugeshmget01.c 2009-11-20 00:05:21.000000000 +0800 >> +++ hugeshmget01_1.c 2010-01-21 08:41:56.350057513 +0800 >> @@ -160,7 +160,7 @@ >> setup(void) >> { >> /* capture signals */ >> - tst_sig(NOFORK, DEF_HANDLER, cleanup); >> + tst_sig(FORK, DEF_HANDLER, cleanup); >> >> /* Pause if that option was specified */ >> TEST_PAUSE; >> >> >> 2010/1/21 Crossover Lonely <cro...@gm...> <cro...@gm...> <cro...@gm...> <cro...@gm...> >> >> >> Hi all, >> >> When the hugeshmget01 runs, it gets unexpected signal SIGCHLD/SIGCLD, >> and thus stops immediately. >> I found two ways to resolve this problem. Please refer to the >> following for two kinds of patch. >> Well, according to other code structures of hugeshmget0*.c, solution 1 >> is preferred. But for get_no_of_hugepages >> will call popen(), so I think the second solution is the right one. >> Will you please choose the right one to apply to >> ltp-intermediate-20100119 package? >> Looking forward to your confirmation! >> >> Thanks and Best Regards, >> shenghui >> >> Solution 1=============================================================== >> >> diff -Nur >> ltp-intermediate-20100119-origin/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> ltp-intermediate-20100119/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> --- >> ltp-intermediate-20100119-origin/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> 2010-01-21 07:51:55.926035076 +0800 >> +++ >> ltp-intermediate-20100119/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> 2010-01-21 08:14:05.470032624 +0800 >> @@ -78,14 +78,14 @@ >> tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); >> } >> >> - setup(); /* global setup */ >> - >> /* The following loop checks looping state if -i option given */ >> if ( get_no_of_hugepages() <= 0 || hugepages_size() <= 0 ) >> tst_brkm(TBROK, cleanup, "Test cannot be continued owning to >> sufficient availability of Hugepages on the system"); >> else >> - huge_pages_shm_to_be_allocated = ( get_no_of_hugepages() * >> hugepages_size() * 1024) / 2 ; >> - >> + huge_pages_shm_to_be_allocated = ( get_no_of_hugepages() * >> hugepages_size() * 1024) / 2 ; >> + >> + setup(); /* global setup */ >> + >> for (lc = 0; TEST_LOOPING(lc); lc++) { >> /* reset Tst_count in case we are looping */ >> Tst_count = 0; >> >> >> Solution >> 2========================================================================================= >> diff -Nur >> ltp-intermediate-20100119-origin/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> ltp-intermediate-20100119/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> --- >> ltp-intermediate-20100119-origin/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> 2010-01-21 07:51:55.926035076 +0800 >> +++ >> ltp-intermediate-20100119/testcases/kernel/mem/hugetlb/hugeshmget/hugeshmget01.c >> 2010-01-21 08:16:46.122032889 +0800 >> @@ -160,7 +160,7 @@ >> setup(void) >> { >> /* capture signals */ >> - tst_sig(NOFORK, DEF_HANDLER, cleanup); >> + tst_sig(FORK, DEF_HANDLER, cleanup); >> >> /* Pause if that option was specified */ >> TEST_PAUSE; >> >> >> >> ------------------------------ >> >> ------------------------------------------------------------------------------ >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for Conference >> attendees to learn about information security's most important issues through >> interactions with peers, luminaries and emerging and established companies.http://p.sf.net/sfu/rsaconf-dev2dev >> >> ------------------------------ >> >> ______________________________ >> _________________ >> Ltp-list mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/ltp-list >> >> >> >> >> > > > -- > > > Thanks and Best Regards, > shenghui > -- Thanks and Best Regards, shenghui |