shmem_2nstest: fix a bug of hang
PATCH v3 2/2 shmem_2nstest: fix a bug of hang
commit d2e9f84 replace fprintf() with snprintf() in tst_print(), but this will cause container_test.sh hang in case shmem_2nstest.
If compile tst_res.c without -O[level], the case will not hang.
When I test the following cases:
# ./shmem_2nstest none shmem_2nstest 0 TINFO : Shared Memory namespace test : none shmem_2nstest 0 TINFO : Cont1: Able to create shared mem segment shmem_2nstest 1 TPASS : Plain cloned process able to access shmem segment created # ./shmem_2nstest unshare shmem_2nstest 0 TINFO : Shared Memory namespace test : unshare shmem_2nstest 0 TINFO : Cont1: Able to create shared mem segment shmem_2nstest 0 TINFO : Cont2: Able to allocate shmem seg with the same key shmem_2nstest 1 TPASS : unshare : In namespace2 unable to access the shmem seg created in Namespace1 # ./shmem_2nstest clone shmem_2nstest 0 TINFO : Shared Memory namespace test : clone
this will hang up.
So I think tst_resm("Cont1") will cause hang.
--- .../kernel/containers/sysvipc/shmem_2nstest.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
testcases/kernel/containers/sysvipc/shmem_2nstest.c +1 -1
@@ -69,8 +69,8 @@ int check_shmem1(void *vtest)if (id1 ==-1 )tst_brkm (TFAIL |TERRNO ,NULL ,"shmget failed" ); -tst_resm (TINFO ,"Cont1: Able to create shared mem segment" );write (p1[1 ],"done" ,5 ); +tst_resm (TINFO ,"Cont1: Able to create shared mem segment" );tst_exit (); }
Signature · 17 lines
1.7.1 -- Best Regards, Peng ------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
Quoted 19 lines · Peng Haitao
commit d2e9f84 replace
fprintf()withsnprintf()intst_print(), but this will causecontainer_test.shhang in caseshmem_2nstest.If compile
tst_res.cwithout -O[level], the case will not hang.When I test the following cases:
# ./shmem_2nstest none shmem_2nstest 0 TINFO : Shared Memory namespace test : none shmem_2nstest 0 TINFO : Cont1: Able to create shared mem segment shmem_2nstest 1 TPASS : Plain cloned process able to access shmem segment created # ./shmem_2nstest unshare shmem_2nstest 0 TINFO : Shared Memory namespace test : unshare shmem_2nstest 0 TINFO : Cont1: Able to create shared mem segment shmem_2nstest 0 TINFO : Cont2: Able to allocate shmem seg with the same key shmem_2nstest 1 TPASS : unshare : In namespace2 unable to access the shmem seg created in Namespace1 # ./shmem_2nstest clone shmem_2nstest 0 TINFO : Shared Memory namespace test : clone
Quoted 3 lines
this will hang up.
So I think
tst_resm("Cont1")will cause hang.
Tested OK to me.
Quoted 11 lines
Signed-off-by Peng Haitao <[email protected]>--- .../kernel/containers/sysvipc/shmem_2nstest.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)testcases/kernel/containers/sysvipc/shmem_2nstest.c +0
-0
testcases/kernel/containers/sysvipc/shmem_2nstest.c int check_shmem1(void *vtest) · line 76
Quoted 9 lines
testcases/kernel/containers/sysvipc/shmem_2nstest.c +1
-1@@ -69,8 +69,8 @@ int check_shmem1(void *vtest)if (id1 ==-1 )tst_brkm (TFAIL |TERRNO ,NULL ,"shmget failed" ); -tst_resm (TINFO ,"Cont1: Able to create shared mem segment" );write (p1[1 ],"done" ,5 ); +tst_resm (TINFO ,"Cont1: Able to create shared mem segment" );tst_exit (); }
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list
Hi!
Quoted 18 lines
commit d2e9f84 replace
fprintf()withsnprintf()intst_print(), but this will causecontainer_test.shhang in caseshmem_2nstest.If compile
tst_res.cwithout -O[level], the case will not hang.When I test the following cases:
# ./shmem_2nstest none shmem_2nstest 0 TINFO : Shared Memory namespace test : none shmem_2nstest 0 TINFO : Cont1: Able to create shared mem segment shmem_2nstest 1 TPASS : Plain cloned process able to access shmem segment created # ./shmem_2nstest unshare shmem_2nstest 0 TINFO : Shared Memory namespace test : unshare shmem_2nstest 0 TINFO : Cont1: Able to create shared mem segment shmem_2nstest 0 TINFO : Cont2: Able to allocate shmem seg with the same key shmem_2nstest 1 TPASS : unshare : In namespace2 unable to access the shmem seg created in Namespace1 # ./shmem_2nstest clone shmem_2nstest 0 TINFO : Shared Memory namespace test : clone
Quoted 3 lines
this will hang up.
So I think
tst_resm("Cont1")will cause hang.
Looked in the code, the stack for cloned process is four pages in size (see ltp_clone_quick()). And when the tst_resm() is called, the buffer created on stack to store the message most likely overflows the stack which results in hang in snprintf(). So I would rather remove this tst_resm() entirely.
Anyway this is good catch, thanks.
Signature · 12 lines
Cyril Hrubis [email protected] ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
Hi!
Quoted 5 lines
Looked in the code, the stack for cloned process is four pages in size (see
ltp_clone_quick()). And when thetst_resm()is called, the buffer created on stack to store the message most likely overflows the stack which results in hang insnprintf(). So I would rather remove thistst_resm()entirely.
Hmm, or we could add a page or two to the ltp_clone_quick(), which should be quite safe...
Signature · 12 lines
Cyril Hrubis [email protected] ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
Hi!
Quoted 2 lines
Hmm, or we could add a page or two to the
ltp_clone_quick(), which should be quite safe...
I've commited a patch that increases the cloned process stack size from four to six pages (which seems to be enough to work here). Please test that this works also for you and if that change hasn't breaked anything else.
Signature · 12 lines
Cyril Hrubis [email protected] ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list