Steve Hay wrote:

>Anyway, I've made an interesting new discovery:  the ithreads.t test 
>crashes the server because ithreads.pm contains "use warnings FATAL => 
>'all'".  Simply commenting-out that line, the skeleton test now succeeds!
>
Furthermore, the full svn (rev 111694) test suite, with 
t/perl/ithreads.t re-enabled, also works!  The warnings now appear in 
the console window:

t\perl\ithreads.........................Attempt to free temp 
prematurely: SV 0x8437b04, Perl interpreter: 0x470e764 at 
C:\Temp\mod_perl-2.0\t\response/TestPerl/ithreads.pm line 44.
Attempt to free temp prematurely: SV 0x84378dc, Perl interpreter: 
0x470e764 at C:\Temp\mod_perl-2.0\t\response/TestPerl/ithreads.pm line 44.
Attempt to free temp prematurely: SV 0x476b4a0, Perl interpreter: 
0x470e764 at C:\Temp\mod_perl-2.0\t\response/TestPerl/ithreads.pm line 44.
Scalars leaked: 3
Attempt to free temp prematurely: SV 0x83d06e4, Perl interpreter: 
0x7b522a4 at C:\Temp\mod_perl-2.0\t\response/TestPerl/ithreads.pm line 61.
Attempt to free temp prematurely: SV 0x83d04bc, Perl interpreter: 
0x7b522a4 at C:\Temp\mod_perl-2.0\t\response/TestPerl/ithreads.pm line 61.
Attempt to free temp prematurely: SV 0x4763bd4, Perl interpreter: 
0x7b522a4 at C:\Temp\mod_perl-2.0\t\response/TestPerl/ithreads.pm line 61.
Scalars leaked: 3

Lines 44 & 61 are respectively the last lines of these two chunks:

        my $thr = threads->new(sub {
            my $tid = threads->self->tid;
            debug "2nd TID is $tid" if defined $tid;
            return 2;
        });

        my $thr = threads->new(sub {
            my $tid = threads->self->tid;
            debug "2nd TID is $tid" if defined $tid;
            $counter_priv += $counter_priv for 1..10;
            {
                lock $counter_shar;
                $counter_shar += $counter_shar for 1..10;
            }
        });

Regarding that warning, perldiag says:

"Mortalized values are supposed to be freed by the free_tmps() routine. 
This indicates that something else is freeing the SV before the 
free_tmps() routine gets a chance, which means that the free_tmps() 
routine will be freeing an unreferenced scalar when it does try to free it."

Presumably the "something else" that is trying to free the SV's here is 
simply the wrong interpreter?

- Steve


------------------------------------------------
Radan Computational Ltd.

We would like to take this opportunity to wish all our customers, suppliers and 
colleagues seasons greetings.  We will not be sending corporate greetings 
cards this year.  Instead, we will be making a donation to charity.

The information contained in this message and any files transmitted with it are 
confidential and intended for the addressee(s) only.  If you have received this 
message in error or there are any problems, please notify the sender 
immediately.  The unauthorized use, disclosure, copying or alteration of this 
message is strictly forbidden.  Note that any views or opinions presented in 
this email are solely those of the author and do not necessarily represent 
those of Radan Computational Ltd.  The recipient(s) of this message should 
check it and any attached files for viruses: Radan Computational will accept no 
liability for any damage caused by any virus transmitted by this email.

Reply via email to