Skip to contentSkip to conversation

shmem_2nstest: fix a bug of hang

PATCH In review Peng Haitao 3 participants 5 messages Feb 21, 2012 – Feb 23, 2012

lore
Share & tools
lore
#0 lore raw

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
index 7a468ad..28e91ff 100644
@@ -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
Acked-by on v3 2/2
#1 lore raw
Quoted 19 lines · Peng Haitao

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
Quoted 3 lines

this will hang up.

So I think tst_resm("Cont1") will cause hang.

Tested OK to me.

Quoted 11 lines
---
 .../kernel/containers/sysvipc/shmem_2nstest.c      |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
testcases/kernel/containers/sysvipc/shmem_2nstest.c +0 -0
index 7a468ad..28e91ff 100644

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

#2 lore raw
In reply to Peng Haitao

Hi!

Quoted 18 lines

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
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
#3 lore raw

Hi!

Quoted 5 lines

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.

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
#4 lore raw

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