Issue Details (XML | Word | Printable)

Key: STDCXX-625
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Travis Vitek
Reporter: Travis Vitek
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
C++ Standard Library

[IBM XLC++ 9.0/AIX 5.3] SIGSEGV in 0.process

Created: 31/Oct/07 01:14 AM   Updated: 06/Mar/08 05:11 PM
Return to search
Component/s: Tests
Affects Version/s: 4.2.0
Fix Version/s: 4.2.1

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works stdcxx-625.patch 2007-11-06 11:26 PM Travis Vitek 7 kB
Text File Licensed for inclusion in ASF works test.cpp 2007-10-31 01:33 AM Travis Vitek 1 kB
Environment: HP-UX or AIX platforms

Patch Info: Patch Available
Severity: Incorrect Behavior
Resolved: 04/Feb/08 10:39 PM
Resolution Date: 06/Mar/08 05:11 PM


 Description  « Hide
It appears that when we re-register for the signal from within the user signal handler the user signal handler is immediately invoked again. This recursion causes a stack overflow and a crash. Here is the stack on AIX....
sig_handler(int)( = 20), line 528 in "process.cpp"
sigaction(??, ??, ??) at 0xd01fa358
signal(??, ??) at 0xd02759a8
sig_handler(int)( = 20), line 528 in "process.cpp"
sigaction(??, ??, ??) at 0xd01fa358
signal(??, ??) at 0xd02759a8
sig_handler(int)( = 20), line 528 in "process.cpp"
nsleep(??, ??) at 0xd01fa1d4
sleep(??) at 0xd02051d4
unnamed block $b656, line 553 in "process.cpp"
rw_waitpid(long,int*,int)(pid = 782442, result = 0x2ff226a0, timeout = 5), line 553 in "process.cpp"
join_test(long,bool)(pid = 782442, should_hang = false), line 51 in "0.process.cpp"
test_process_create1()(), line 109 in "0.process.cpp"
run_test(int,char**)(argc = 1, argv = 0x2ff22a60), line 276 in "0.process.cpp"
rw_vtest(int,char**,const char*,const char*,const char*,int(*)(int,char**),const char*,char*)(argc = 1, argv = 0x2ff22a60, file_name = "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause = "0.process", comment = "", fun = 0x2000b85c, optstr = "|-child#0 |-timeout#", va = " "), line 1030 in "driver.cpp"
rw_test(int,char**,const char*,const char*,const char*,int(*)(int,char**),const char*,...)(argc = 1, argv = 0x2ff22a60, fname = "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause = "0.process", comment = "", testfun = 0x2000b85c, optstr = "|-child#0 |-timeout#", ... = 0x20009608), line 1128 in "driver.cpp"
main(argc = 1, argv = 0x2ff22a60), line 299 in "0.process.cpp"

Here is the stack on HP-UX

#0  sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#1  <signal handler called>
#2  0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#3  0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#4  0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#5  0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#6  <signal handler called>
#7  0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#8  0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#9  0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#10 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#11 <signal handler called>
#12 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#13 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#14 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#15 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#16 <signal handler called>
#17 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#18 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#19 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#20 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#21 <signal handler called>
#22 0x7b00a160 in __sigtimedwait_sys+0x10 () from /usr/lib/libc.2
#23 0x7b013c84 in sigtimedwait+0x6c () from /usr/lib/libc.2
#24 0x7afa2a50 in sleep+0xe8 () from /usr/lib/libc.2
#25 0x188f0 in rw_waitpid (pid=13825, result=0x7f7f0db0, timeout=5)
    at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:555
#26 0x15250 in join_test (pid=13825, should_hang=false) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:51
#27 0x15424 in test_process_create1 () at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:109
#28 0x159b4 in run_test (argc=1, argv=0x7f7f08d4) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:276
#29 0x16d1c in rw_vtest (argc=1, argv=0x7f7f08d4, 
    file_name=0x8e090 "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause=0x8e528 "0.process", 
    comment=0x8e08f "", fun=0x4001ed52 <run_test(int, char **)>, optstr=0x8e534 "|-child#0 |-timeout#", va=0x7f7f0a34)
    at /amd/devco/vitek/stdcxx-trunk/tests/src/driver.cpp:1030
#30 0x171ec in rw_test (argc=1, argv=0x7f7f08d4, fname=0x8e090 "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", 
    clause=0x8e528 "0.process", comment=0x8e08f "", testfun=0x4001ed52 <run_test(int, char **)>, 
    optstr=0x8e534 "|-child#0 |-timeout#") at /amd/devco/vitek/stdcxx-trunk/tests/src/driver.cpp:1127
#31 0x15ad4 in main (argc=1, argv=0x7f7f08d4) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:299


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Travis Vitek made changes - 31/Oct/07 01:33 AM
Field Original Value New Value
Attachment stdcxx-625.patch [ 12368734 ]
Attachment test.cpp [ 12368733 ]
Travis Vitek made changes - 01/Nov/07 08:25 PM
Attachment stdcxx-625v2.patch [ 12368841 ]
Travis Vitek made changes - 01/Nov/07 08:28 PM
Attachment stdcxx-625v2.patch [ 12368842 ]
Travis Vitek made changes - 01/Nov/07 08:28 PM
Attachment stdcxx-625v2.patch [ 12368841 ]
Travis Vitek made changes - 05/Nov/07 11:46 PM
Attachment stdcxx-625v2.patch [ 12368842 ]
Travis Vitek made changes - 06/Nov/07 11:26 PM
Attachment stdcxx-625.patch [ 12369063 ]
Travis Vitek made changes - 06/Nov/07 11:27 PM
Attachment stdcxx-625.patch [ 12368734 ]
Travis Vitek made changes - 07/Nov/07 08:19 PM
Severity Runtime Error Binary Incompatibility
Priority Minor [ 4 ] Major [ 3 ]
Summary 0.process test fails with SEGV due to stack overflow [IBM XLC++ 9.0/AIX 5.3] SIGSEGV in 0.process
Travis Vitek made changes - 28/Nov/07 08:48 PM
Severity Binary Incompatibility Incorrect Behavior
Travis Vitek made changes - 04/Feb/08 06:12 PM
Description It appears that when we re-register for the signal from within the user signal handler the user signal handler is immediately invoked again. This recursion causes a stack overflow and a crash. Here is the stack on AIX....

sig_handler(int)( = 20), line 528 in "process.cpp"
sigaction(??, ??, ??) at 0xd01fa358
signal(??, ??) at 0xd02759a8
sig_handler(int)( = 20), line 528 in "process.cpp"
sigaction(??, ??, ??) at 0xd01fa358
signal(??, ??) at 0xd02759a8
sig_handler(int)( = 20), line 528 in "process.cpp"
nsleep(??, ??) at 0xd01fa1d4
sleep(??) at 0xd02051d4
unnamed block $b656, line 553 in "process.cpp"
rw_waitpid(long,int*,int)(pid = 782442, result = 0x2ff226a0, timeout = 5), line 553 in "process.cpp"
join_test(long,bool)(pid = 782442, should_hang = false), line 51 in "0.process.cpp"
test_process_create1()(), line 109 in "0.process.cpp"
run_test(int,char**)(argc = 1, argv = 0x2ff22a60), line 276 in "0.process.cpp"
rw_vtest(int,char**,const char*,const char*,const char*,int(*)(int,char**),const char*,char*)(argc = 1, argv = 0x2ff22a60, file_name = "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause = "0.process", comment = "", fun = 0x2000b85c, optstr = "|-child#0 |-timeout#", va = " "), line 1030 in "driver.cpp"
rw_test(int,char**,const char*,const char*,const char*,int(*)(int,char**),const char*,...)(argc = 1, argv = 0x2ff22a60, fname = "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause = "0.process", comment = "", testfun = 0x2000b85c, optstr = "|-child#0 |-timeout#", ... = 0x20009608), line 1128 in "driver.cpp"
main(argc = 1, argv = 0x2ff22a60), line 299 in "0.process.cpp"


Here is the stack on HP-UX

#0 sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#1 <signal handler called>
#2 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#3 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#4 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#5 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#6 <signal handler called>
#7 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#8 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#9 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#10 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#11 <signal handler called>
#12 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#13 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#14 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#15 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#16 <signal handler called>
#17 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#18 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#19 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#20 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#21 <signal handler called>
#22 0x7b00a160 in __sigtimedwait_sys+0x10 () from /usr/lib/libc.2
#23 0x7b013c84 in sigtimedwait+0x6c () from /usr/lib/libc.2
#24 0x7afa2a50 in sleep+0xe8 () from /usr/lib/libc.2
#25 0x188f0 in rw_waitpid (pid=13825, result=0x7f7f0db0, timeout=5)
    at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:555
#26 0x15250 in join_test (pid=13825, should_hang=false) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:51
#27 0x15424 in test_process_create1 () at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:109
#28 0x159b4 in run_test (argc=1, argv=0x7f7f08d4) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:276
#29 0x16d1c in rw_vtest (argc=1, argv=0x7f7f08d4,
    file_name=0x8e090 "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause=0x8e528 "0.process",
    comment=0x8e08f "", fun=0x4001ed52 <run_test(int, char **)>, optstr=0x8e534 "|-child#0 |-timeout#", va=0x7f7f0a34)
    at /amd/devco/vitek/stdcxx-trunk/tests/src/driver.cpp:1030
#30 0x171ec in rw_test (argc=1, argv=0x7f7f08d4, fname=0x8e090 "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp",
    clause=0x8e528 "0.process", comment=0x8e08f "", testfun=0x4001ed52 <run_test(int, char **)>,
    optstr=0x8e534 "|-child#0 |-timeout#") at /amd/devco/vitek/stdcxx-trunk/tests/src/driver.cpp:1127
#31 0x15ad4 in main (argc=1, argv=0x7f7f08d4) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:299

It appears that when we re-register for the signal from within the user signal handler the user signal handler is immediately invoked again. This recursion causes a stack overflow and a crash. Here is the stack on AIX....

{noformat}
sig_handler(int)( = 20), line 528 in "process.cpp"
sigaction(??, ??, ??) at 0xd01fa358
signal(??, ??) at 0xd02759a8
sig_handler(int)( = 20), line 528 in "process.cpp"
sigaction(??, ??, ??) at 0xd01fa358
signal(??, ??) at 0xd02759a8
sig_handler(int)( = 20), line 528 in "process.cpp"
nsleep(??, ??) at 0xd01fa1d4
sleep(??) at 0xd02051d4
unnamed block $b656, line 553 in "process.cpp"
rw_waitpid(long,int*,int)(pid = 782442, result = 0x2ff226a0, timeout = 5), line 553 in "process.cpp"
join_test(long,bool)(pid = 782442, should_hang = false), line 51 in "0.process.cpp"
test_process_create1()(), line 109 in "0.process.cpp"
run_test(int,char**)(argc = 1, argv = 0x2ff22a60), line 276 in "0.process.cpp"
rw_vtest(int,char**,const char*,const char*,const char*,int(*)(int,char**),const char*,char*)(argc = 1, argv = 0x2ff22a60, file_name = "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause = "0.process", comment = "", fun = 0x2000b85c, optstr = "|-child#0 |-timeout#", va = " "), line 1030 in "driver.cpp"
rw_test(int,char**,const char*,const char*,const char*,int(*)(int,char**),const char*,...)(argc = 1, argv = 0x2ff22a60, fname = "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause = "0.process", comment = "", testfun = 0x2000b85c, optstr = "|-child#0 |-timeout#", ... = 0x20009608), line 1128 in "driver.cpp"
main(argc = 1, argv = 0x2ff22a60), line 299 in "0.process.cpp"
{noformat}

Here is the stack on HP-UX

{noformat}
#0 sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#1 <signal handler called>
#2 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#3 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#4 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#5 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#6 <signal handler called>
#7 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#8 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#9 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#10 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#11 <signal handler called>
#12 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#13 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#14 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#15 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#16 <signal handler called>
#17 0x7b0086c0 in _sigvector+0x10 () from /usr/lib/libc.2
#18 0x7b00f114 in signalvector+0xac () from /usr/lib/libc.2
#19 0x7b00f020 in signal+0xa0 () from /usr/lib/libc.2
#20 0x187fc in sig_handler (No.Identifier=18) at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:529
#21 <signal handler called>
#22 0x7b00a160 in __sigtimedwait_sys+0x10 () from /usr/lib/libc.2
#23 0x7b013c84 in sigtimedwait+0x6c () from /usr/lib/libc.2
#24 0x7afa2a50 in sleep+0xe8 () from /usr/lib/libc.2
#25 0x188f0 in rw_waitpid (pid=13825, result=0x7f7f0db0, timeout=5)
    at /amd/devco/vitek/stdcxx-trunk/tests/src/process.cpp:555
#26 0x15250 in join_test (pid=13825, should_hang=false) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:51
#27 0x15424 in test_process_create1 () at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:109
#28 0x159b4 in run_test (argc=1, argv=0x7f7f08d4) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:276
#29 0x16d1c in rw_vtest (argc=1, argv=0x7f7f08d4,
    file_name=0x8e090 "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp", clause=0x8e528 "0.process",
    comment=0x8e08f "", fun=0x4001ed52 <run_test(int, char **)>, optstr=0x8e534 "|-child#0 |-timeout#", va=0x7f7f0a34)
    at /amd/devco/vitek/stdcxx-trunk/tests/src/driver.cpp:1030
#30 0x171ec in rw_test (argc=1, argv=0x7f7f08d4, fname=0x8e090 "/amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp",
    clause=0x8e528 "0.process", comment=0x8e08f "", testfun=0x4001ed52 <run_test(int, char **)>,
    optstr=0x8e534 "|-child#0 |-timeout#") at /amd/devco/vitek/stdcxx-trunk/tests/src/driver.cpp:1127
#31 0x15ad4 in main (argc=1, argv=0x7f7f08d4) at /amd/devco/vitek/stdcxx-trunk/tests/self/0.process.cpp:299
{noformat}
Travis Vitek made changes - 04/Feb/08 10:39 PM
Status Open [ 1 ] Resolved [ 5 ]
Resolution Fixed [ 1 ]
Martin Sebor made changes - 20/Feb/08 01:00 AM
Status Resolved [ 5 ] Reopened [ 4 ]
Resolution Fixed [ 1 ]
Travis Vitek made changes - 06/Mar/08 05:11 PM
Resolution Fixed [ 1 ]
Status Reopened [ 4 ] Closed [ 6 ]