On Tue, Feb 07, 2012 at 10:54:12PM +0000, Tim Bunce wrote:
> > - if (!imp_msv) {
> > + if (!imp_msv || !GvCV(imp_msv)) {
>
> What's the GvCV test for?
One of the more vicious tests in t/31methcache.t does
local $DBD::Sponge::st::{fetch};
which causes gv_fetchmeth(...,'fetch') to return a GV that has a null CV
slot (IIRC).
> > +# With this test code and threads, 5.8.1 has issues with freeing freed
> > +# scalars, while 5.8.9 doesn't; I don't know about in-between - DAPM
>
> "issues"? i.e., warnings at global destruction?
Yes, similar to those that t/35thrclone.t generates; i.e. I assume that
it's a generic issue with ithreads in early 5.8.x releases (I remember
fixing a lot of such issues, and Nicholas backporting them into
maint-5.8). So I decided to just skip the threading-related cache tests
for early 5.8.x's.
> The Mac OS X perl 5.8.8 with threads that I have handy works ok.
>
> > +my $has_threads = $Config{useithreads} && $] >= 5.008009;
> > +die $use_threads_err if $has_threads && $use_threads_err;
>
> Umm.
>
> I'm tempted to disable the cache at compile time for perl < 5.8.8.
I don't think the caching code is bringing up any new threading issues
with early 5.8.x's; i.e. the new test file t/31methcache gives the same
pattern of 'Attempt to free unreferenced scalar' warnings with or without
the cache code.
> Meanwhile, I've applied the patch and uploaded a trial release
> for cpantesters to chew on. Once there are sufficient reports from old
> perls that have threading enabled I'll scan them for warnings.
Ok thanks.
PS - I'm currently working on bringing PERINTERP and DBIS into the
Brave New World of MY_CXT.
--
Hofstadter's Law: It always takes longer than you expect, even when you
take into account Hofstadter's Law.