Ticket #1134 (closed bug: fixed)

Opened 5 years ago

Last modified 5 years ago

Extremely weird stack trace produced my Parrot when allocating things in a long loop in Rakudo

Reported by: masak Owned by:
Priority: normal Milestone:
Component: GC Version: 1.7.0
Severity: high Keywords:
Cc: Language:
Patch status: Platform:

Description

$ time perl6 -e 'my @a; for 1 .. 100_000 { @a.push(42) }'
src/gc/api.c:248: failed assertion 'PObj_is_PMC_TEST(obj)'
Backtrace - Obtained 31 stack frames (max trace depth is 32).
0   libparrot.dylib                     0x005fc2ad Parrot_do_check_events + 173
1   libparrot.dylib                     0x005fc417 Parrot_confess + 151
2   libparrot.dylib                     0x006097a7 Parrot_gc_mark_PMC_alive_fun + 135
3   libparrot.dylib                     0x007a05f5 Parrot_CodeString_get_isa + 1957
4   libparrot.dylib                     0x0060d4fe Parrot_is_blocked_GC_sweep + 6398
5   libparrot.dylib                     0x006098c7 Parrot_gc_mark_PObj_alive + 183
6   libparrot.dylib                     0x0060eac1 Parrot_is_blocked_GC_sweep + 11969
7   libparrot.dylib                     0x0060eb8e Parrot_is_blocked_GC_sweep + 12174
8   libparrot.dylib                     0x0060ec0c Parrot_is_blocked_GC_sweep + 12300
9   libparrot.dylib                     0x0060d076 Parrot_is_blocked_GC_sweep + 5238
10  libparrot.dylib                     0x0060c213 Parrot_is_blocked_GC_sweep + 1555
11  libparrot.dylib                     0x0060c355 Parrot_is_blocked_GC_sweep + 1877
12  libparrot.dylib                     0x0060a7e3 Parrot_gc_mark_STRING_alive_fun + 3827
13  libparrot.dylib                     0x0060c5e8 Parrot_is_blocked_GC_sweep + 2536
14  libparrot.dylib                     0x0060c750 Parrot_is_blocked_GC_sweep + 2896
15  libparrot.dylib                     0x00609dfd Parrot_gc_mark_STRING_alive_fun + 1293
16  libparrot.dylib                     0x00673156 pmc_reuse + 566
17  libparrot.dylib                     0x00673278 pmc_new + 232
18  libparrot.dylib                     0x0067d52e new_ret_continuation_pmc + 78
19  libparrot.dylib                     0x0061d92d new_runloop_jump_point + 765
20  libparrot.dylib                     0x0061e2a5 Parrot_run_meth_fromc_args_reti + 213
21  libparrot.dylib                     0x007c135a Parrot_NameSpace_get_isa + 30186
22  libparrot.dylib                     0x0057dd2d Parrot_str_from_int + 3469
23  libparrot.dylib                     0x00676037 enable_event_checking + 1991
24  libparrot.dylib                     0x00674f2a Parrot_runcore_switch + 3978
25  libparrot.dylib                     0x0061d7b8 new_runloop_jump_point + 392
26  libparrot.dylib                     0x0061dae6 new_runloop_jump_point + 1206
27  libparrot.dylib                     0x0061e7ea Parrot_runops_fromc_args + 186
28  libparrot.dylib                     0x005f9101 Parrot_runcode + 337
29  perl6                               0x00001ac9 start + 505
30  perl6                               0x00001906 start + 54
Abort trap
 
real	0m13.675s
user	0m8.711s
sys	0m0.405s


<masak> hi, does this look strange to anyone? http://gist.github.com/215912
<whiteknight> masak: extremely weird
<masak> whiteknight: well, now you know how to reproduce it.
<masak> just push stuff to an array in a long Perl 6 for loop.
<whiteknight> Can you create a ticket?
<masak> whiteknight: I'll try.
<whiteknight> awesome. Thanks

Change History

Changed 5 years ago by whiteknight

I've seen this same backtrace a few days ago, and it's extremely strange. Some points:

  • Parrot_str_from_int does not call Parrot_NameSpace_get_isa
  • new_runloop_jump_point() does not call itself, and does not call into the runcore.
  • pmc_new() does not call pmc_reuse().
  • Parrot_gc_is_blocked_GC_sweep() is a simple accessor. It doesn't call itself recursively and doesn't call Parrot_gc_mark_PObj_alive

...And the list goes on and on. In short, this backtrace is nonsensical in every possible way.

Changed 5 years ago by masak

I can no longer reproduce this particular bug.

<masak> hm. I don't seem to have the privs to close it.
<Coke> just comment on it, the magic ticket fairy will close it.
<masak> :)

Changed 5 years ago by coke

  • status changed from new to closed
  • resolution set to fixed
Note: See TracTickets for help on using tickets.