Skip to content

Instantly share code, notes, and snippets.

@japhb
Created October 21, 2012 02:29
Show Gist options
  • Save japhb/3925501 to your computer and use it in GitHub Desktop.
Save japhb/3925501 to your computer and use it in GitHub Desktop.
Rakudo/Parrot crash using run() in a loop
$ perl6 -e 'for 1..100 -> $i { say $i; run "true"; 1; }'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Segmentation fault
$ perl6 -e 'for 1..100 -> $i { say $i; run "true"; 1; }'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*** glibc detected *** perl6: double free or corruption (!prev): 0x00fc83f8 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6f751)[0xed2751]
/lib/i386-linux-gnu/libc.so.6(+0x7107b)[0xed407b]
/lib/i386-linux-gnu/libc.so.6(cfree+0x6d)[0xed720d]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so(+0xb17e)[0x52d17e]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so(+0x1391d)[0x53591d]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_ops.so(+0x1f526)[0xb30526]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_group.so(+0xd5b4)[0x3715b4]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x69d19)[0x179d19]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x6a103)[0x17a103]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_gc_new_pmc_header+0x2d)[0x174a7d]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x8c31d)[0x19c31d]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pmc_new+0x51)[0x19c601]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pcc_reuse_continuation+0x60)[0x184c20]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x3f734)[0x14f734]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x8d9fc)[0x19d9fc]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x8d638)[0x19d638]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x743ad)[0x1843ad]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pcc_invoke_from_sig_object+0xc3)[0x17fd13]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_ext_call+0x76)[0x171c06]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x14fb6d)[0x25fb6d]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pcc_invoke_from_sig_object+0x86)[0x17fcd6]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_ext_call+0x76)[0x171c06]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x918f2)[0x1a18f2]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x920e9)[0x1a20e9]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_cx_begin_execution+0x67)[0x1a2187]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pf_execute_bytecode_program+0xaf)[0x1aa49f]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_api_run_bytecode+0xc5)[0x16dda5]
perl6(main+0x185)[0x80490b5]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0xe79e37]
perl6[0x8048c71]
======= Memory map: ========
00110000-002a1000 r-xp 00000000 08:01 3283286 /home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0
002a1000-002a4000 r--p 00191000 08:01 3283286 /home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0
002a4000-002d4000 rw-p 00194000 08:01 3283286 /home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0
002d4000-002d6000 r-xp 00000000 08:01 271528 /lib/i386-linux-gnu/libdl-2.13.so
002d6000-002d7000 r--p 00001000 08:01 271528 /lib/i386-linux-gnu/libdl-2.13.so
002d7000-002d8000 rw-p 00002000 08:01 271528 /lib/i386-linux-gnu/libdl-2.13.so
002d8000-002e0000 r-xp 00000000 08:01 262192 /lib/i386-linux-gnu/libcrypt-2.13.so
002e0000-002e1000 r--p 00007000 08:01 262192 /lib/i386-linux-gnu/libcrypt-2.13.so
002e1000-002e2000 rw-p 00008000 08:01 262192 /lib/i386-linux-gnu/libcrypt-2.13.so
002e2000-00309000 rw-p 00000000 00:00 0
00309000-0030e000 r-xp 00000000 08:01 1313710 /usr/lib/libffi.so.5.0.10
0030e000-0030f000 r--p 00004000 08:01 1313710 /usr/lib/libffi.so.5.0.10
0030f000-00310000 rw-p 00005000 08:01 1313710 /usr/lib/libffi.so.5.0.10
00310000-00344000 r-xp 00000000 08:01 131108 /lib/libncurses.so.5.7
00344000-00345000 ---p 00034000 08:01 131108 /lib/libncurses.so.5.7
00345000-00347000 r--p 00034000 08:01 131108 /lib/libncurses.so.5.7
00347000-00348000 rw-p 00036000 08:01 131108 /lib/libncurses.so.5.7
00348000-00362000 r-xp 00000000 08:01 278830 /lib/i386-linux-gnu/libgcc_s.so.1
00362000-00363000 r--p 00019000 08:01 278830 /lib/i386-linux-gnu/libgcc_s.so.1
00363000-00364000 rw-p 0001a000 08:01 278830 /lib/i386-linux-gnu/libgcc_s.so.1
00364000-00376000 r-xp 00000000 08:01 3283673 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_group.so
00376000-00377000 r--p 00011000 08:01 3283673 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_group.so
00377000-00378000 rw-p 00012000 08:01 3283673 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_group.so
00378000-0037c000 r-xp 00000000 08:01 3283310 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/io_ops.so
0037c000-0037d000 r--p 00003000 08:01 3283310 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/io_ops.so
0037d000-0037f000 rw-p 00004000 08:01 3283310 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/io_ops.so
0037f000-00385000 r-xp 00000000 08:01 3283305 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/bit_ops.so
00385000-00386000 r--p 00005000 08:01 3283305 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/bit_ops.so
00386000-0038a000 rw-p 00006000 08:01 3283305 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/bit_ops.so
0038a000-00397000 r-xp 00000000 08:01 3283676 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_dyncall_ops.so
00397000-00398000 r--p 0000c000 08:01 3283676 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_dyncall_ops.so
00398000-00399000 rw-p 0000d000 08:01 3283676 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_dyncall_ops.so
003c1000-003c5000 r-xp 00000000 08:01 3283318 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/trans_ops.so
003c5000-003c6000 r--p 00003000 08:01 3283318 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/trans_ops.so
003c6000-003c9000 rw-p 00004000 08:01 3283318 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/trans_ops.so
003e2000-003f7000 r-xp 00000000 08:01 271534 /lib/i386-linux-gnu/libpthread-2.13.so
003f7000-003f8000 r--p 00015000 08:01 271534 /lib/i386-linux-gnu/libpthread-2.13.so
003f8000-003f9000 rw-p 00016000 08:01 271534 /lib/i386-linux-gnu/libpthread-2.13.so
003f9000-003fb000 rw-p 00000000 00:00 0
003fb000-004da000 r-xp 00000000 08:01 1312725 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14
004da000-004de000 r--p 000de000 08:01 1312725 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14
004de000-004df000 rw-p 000e2000 08:01 1312725 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14
004df000-004e6000 rw-p 00000000 00:00 0
00508000-0050a000 r-xp 00000000 08:01 3283317 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/sys_ops.so
0050a000-0050b000 r--p 00001000 08:01 3283317 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/sys_ops.so
0050b000-0050c000 rw-p 00002000 08:01 3283317 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/sys_ops.soAborted
$
@japhb
Copy link
Author

japhb commented Oct 21, 2012

Crashes even faster when the run() is not in sink context:

$ perl6 -e 'for 1..100 -> $i { say $i; my $error = run "true"; 1; }'
1
2
3
4
5
6
7
8
9
10
Segmentation fault
$ perl6 -e 'for 1..100 -> $i { say $i; my $error = run "true"; 1; }'
1
2
3
4
5
6
7
8
9
10
*** glibc detected *** perl6: free(): invalid pointer: 0x08d3a234 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6f751)[0x3e4751]
/lib/i386-linux-gnu/libc.so.6(+0x7107b)[0x3e607b]
/lib/i386-linux-gnu/libc.so.6(cfree+0x6d)[0x3e920d]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so(+0xb17e)[0x1fa17e]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so(+0x1391d)[0x20291d]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_ops.so(+0x1f526)[0x1aa526]
/home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_group.so(+0xd5b4)[0x6555b4]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x69d19)[0xaebd19]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x6a103)[0xaec103]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_gc_new_pmc_header+0x2d)[0xae6a7d]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x8c31d)[0xb0e31d]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pmc_new+0x51)[0xb0e601]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0xf8875)[0xb7a875]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x70f3f)[0xaf2f3f]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x53c7b)[0xad5c7b]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x8d9fc)[0xb0f9fc]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x8d638)[0xb0f638]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x743ad)[0xaf63ad]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pcc_invoke_from_sig_object+0xc3)[0xaf1d13]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_ext_call+0x76)[0xae3c06]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x14fb6d)[0xbd1b6d]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pcc_invoke_from_sig_object+0x86)[0xaf1cd6]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_ext_call+0x76)[0xae3c06]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x918f2)[0xb138f2]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(+0x920e9)[0xb140e9]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_cx_begin_execution+0x67)[0xb14187]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_pf_execute_bytecode_program+0xaf)[0xb1c49f]
/home/geoff/git/rakudo/install/lib/libparrot.so.4.4.0(Parrot_api_run_bytecode+0xc5)[0xadfda5]
perl6(main+0x185)[0x80490b5]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x38be37]
perl6[0x8048c71]
======= Memory map: ========
00110000-0013e000 r-xp 00000000 08:01 131120 /lib/libreadline.so.6.2
0013e000-0013f000 r--p 0002e000 08:01 131120 /lib/libreadline.so.6.2
0013f000-00142000 rw-p 0002f000 08:01 131120 /lib/libreadline.so.6.2
00142000-00143000 rw-p 00000000 00:00 0
00143000-00148000 r-xp 00000000 08:01 1313710 /usr/lib/libffi.so.5.0.10
00148000-00149000 r--p 00004000 08:01 1313710 /usr/lib/libffi.so.5.0.10
00149000-0014a000 rw-p 00005000 08:01 1313710 /usr/lib/libffi.so.5.0.10
0014a000-0017e000 r-xp 00000000 08:01 131108 /lib/libncurses.so.5.7
0017e000-0017f000 ---p 00034000 08:01 131108 /lib/libncurses.so.5.7
0017f000-00181000 r--p 00034000 08:01 131108 /lib/libncurses.so.5.7
00181000-00182000 rw-p 00036000 08:01 131108 /lib/libncurses.so.5.7
00182000-00189000 r-xp 00000000 08:01 3283726 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/perl6_group.so
00189000-0018a000 r--p 00006000 08:01 3283726 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/perl6_group.so
0018a000-0018b000 rw-p 00007000 08:01 3283726 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/perl6_group.so
0018b000-001bb000 r-xp 00000000 08:01 3283674 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_ops.so
001bb000-001bc000 r--p 0002f000 08:01 3283674 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_ops.so
001bc000-001c6000 rw-p 00030000 08:01 3283674 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_ops.so
001c6000-001d3000 r-xp 00000000 08:01 3283676 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_dyncall_ops.so
001d3000-001d4000 r--p 0000c000 08:01 3283676 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_dyncall_ops.so
001d4000-001d5000 rw-p 0000d000 08:01 3283676 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_dyncall_ops.so
001d6000-001eb000 r-xp 00000000 08:01 271534 /lib/i386-linux-gnu/libpthread-2.13.so
001eb000-001ec000 r--p 00015000 08:01 271534 /lib/i386-linux-gnu/libpthread-2.13.so
001ec000-001ed000 rw-p 00016000 08:01 271534 /lib/i386-linux-gnu/libpthread-2.13.so
001ed000-001ef000 rw-p 00000000 00:00 0
001ef000-00205000 r-xp 00000000 08:01 3283675 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so
00205000-00206000 r--p 00015000 08:01 3283675 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so
00206000-00209000 rw-p 00016000 08:01 3283675 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/nqp_bigint_ops.so
0021a000-0021c000 r-xp 00000000 08:01 271528 /lib/i386-linux-gnu/libdl-2.13.so
0021c000-0021d000 r--p 00001000 08:01 271528 /lib/i386-linux-gnu/libdl-2.13.so
0021d000-0021e000 rw-p 00002000 08:01 271528 /lib/i386-linux-gnu/libdl-2.13.so
0021e000-00344000 r-xp 00000000 08:01 1322250 /usr/lib/libicuuc.so.44.2
00344000-0034d000 r--p 00126000 08:01 1322250 /usr/lib/libicuuc.so.44.2
0034d000-0034e000 rw-p 0012f000 08:01 1322250 /usr/lib/libicuuc.so.44.2
0034e000-00352000 rw-p 00000000 00:00 0
0036d000-00370000 r-xp 00000000 08:01 3283312 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/math_ops.so
00370000-00371000 r--p 00002000 08:01 3283312 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/math_ops.so
00371000-00373000 rw-p 00003000 08:01 3283312 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/math_ops.so
00374000-00375000 r-xp 00000000 00:00 0 [vdso]
00375000-004d6000 r-xp 00000000 08:01 271533 /lib/i386-linux-gnu/libc-2.13.so
004d6000-004d7000 ---p 00161000 08:01 271533 /lib/i386-linux-gnu/libc-2.13.so
004d7000-004d9000 r--p 00161000 08:01 271533 /lib/i386-linux-gnu/libc-2.13.so
004d9000-004da000 rw-p 00163000 08:01 271533 /lib/i386-linux-gnu/libc-2.13.so
004da000-004dd000 rw-p 00000000 00:00 0
004dd000-005bc000 r-xp 00000000 08:01 1312725 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14
005bc000-005c0000 r--p 000de000 08:01 1312725 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14
005c0000-005c1000 rw-p 000e2000 08:01 1312725 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14
005c1000-005c8000 rw-p 00000000 00:00 0
005c8000-005ee000 r-xp 00000000 08:01 3283727 /home/geoff/git/rakudo/install/lib/parrot/4.4.0-devel/dynext/perl6_ops.soAborted
$

@japhb
Copy link
Author

japhb commented Oct 21, 2012

However, if the run() is the last statement within the loop block, it can survive 1000 iterations:

$ perl6 -e 'for 1..1000 -> $i { say $i; my $error = run "true"; }'
1
2
...
1000
$ # YAY!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment