Front page | perl.perl5.porters |
Postings from July 2009
Re: [perl #66112] blead and Glib's lazy-loader
Thread Previous
From:
Torsten Schoenfeld
Date:
July 4, 2009 07:43
Subject:
Re: [perl #66112] blead and Glib's lazy-loader
Message ID:
4A4F6A79.1070602@gmx.de
On 28.05.2009 17:21, Nicholas Clark (via RT) wrote:
> # New Ticket Created by Nicholas Clark
> # Please include the string: [perl #66112]
> # in the subject line of all future correspondence about this issue.
> #<URL: http://rt.perl.org/rt3/Ticket/Display.html?id=66112>
>
>
> Torsten Schoenfeld mailed p5p in 48FB1B1B.40803@gmx.de
> http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-10/msg00471.html
>
> it looks like current bleadperl breaks Glib's lazy-loading scheme.
>
> I believe that this issue is the same as
> http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00532.html
Yes, both issues are the same.
> At the time of writing Torsten Schoenfeld had not replied.
For the record, here's what I wrote to the mailing list:
---
Nicholas Clark wrote:
> Is PL_delaymagic 0? If not, which line of code set it non-zero?
> If it is, does the call to mg_set() correctly end up in magic_setisa()?
> And does that get a non-NULL stash, and hence call this code?
PL_delaymagic is 0 and magic_setisa() is called. It gets an apparently
valid stash and calls mro_isa_changed_in(). stashname in
mro_isa_changed_in() is "Glib::InitiallyUnowned", so that seems correct.
The mro_meta struct it then fetches comes out as
{mro_linear_all = 0x0, mro_linear_current = 0xa4980bc,
mro_nextmethod = 0x0, cache_gen = 3, pkg_gen = 3, mro_which = 0x8381ab8,
isa = 0xa4980ec}.
The isarev loop then first finds "Bar" with mro_meta struct
{mro_linear_all = 0x0, mro_linear_current = 0x92c317c,
mro_nextmethod = 0x0, cache_gen = 4, pkg_gen = 4, mro_which = 0x8381ab8,
isa = 0x92c319c},
and then "Foo" with
{mro_linear_all = 0x0, mro_linear_current = 0x92c30bc,
mro_nextmethod = 0x0, cache_gen = 4, pkg_gen = 4, mro_which = 0x8381ab8,
isa = 0x92c30dc}.
The mro_get_linear_isa() loop at the end is not executed since items is 0.
---
Thread Previous