develooper 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About