You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by "Beau E. Cox" <be...@beaucox.com> on 2004/01/31 04:45:30 UTC

[mp2] Attempt to free unreferenced scalar: ...

-------------8<---------- Start Bug Report ------------8<----------
1. Problem Description:

I am trying to port Mason to mod_perl2 w/libapreq2. It seems I have munged it
up. When 'stressing' the site (downloading a Mason-enabled uri with
wget in a looping shell script), I get lots of

Attempt to free unreferenced scalar: SV 0x405e6e78 at 
/usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
Attempt to free unreferenced scalar: SV 0x405e6e78 at 
/usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
Attempt to free unreferenced scalar: SV 0x405e6e78 at 
/usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
...

Not just in DBI.pm; Lots of others: HTML::Parser, HTML::Mason::Requesr,
etc. The lines in quesion always show:
$somevar = delete $some_hash_passed_as_an_arg{somekey};

Now, the REALLY crazy part: the address shown is ALWAYS
SV 0x405e6e78 - this must be someting other than the scalar's
address, right? The address of the execption routine catching
the problem?

Stressing a non-Mason-enabled uri does NOT fail.

Are there any tools I can use to pinpoint my bug?

2. Used Components and their Configuration:

*** mod_perl version 1.9913

*** using lib/Apache/BuildConfig.pm
*** Makefile.PL options:
  MP_APXS        => /usr/apache2/sbin/apxs
  MP_COMPAT_1X   => 
  MP_GENERATE_XS => 1
  MP_LIBNAME     => mod_perl
  MP_USE_DSO     => 1
  MP_USE_STATIC  => 1


*** /usr/apache2/sbin/httpd -V
Server version: Apache/2.0.48
Server built:   Jan 26 2004 06:20:30
Server's Module Magic Number: 20020903:4
Architecture:   32-bit
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/worker"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D HTTPD_ROOT="/usr/apache2"
 -D SUEXEC_BIN="/usr/apache2/bin/suexec"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/httpd/mime.types"
 -D SERVER_CONFIG_FILE="/etc/httpd/httpd.conf"


*** /usr/bin/perl -V
Summary of my perl5 (revision 5.0 version 8 subversion 2) configuration:
  Platform:
    osname=linux, osvers=2.4.24-pre1.lm, archname=i686-linux-thread-multi
    uname='linux cathy.beaucox.com 2.4.24-pre1.lm #1 thu dec 11 02:58:17 hst 
2003 i686 unknown unknown gnulinux '
    config_args='-Dprefix=/usr -d -e -Dusethreads'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE 
-D_FILE_OFFSET_BITS=64',
    optimize='-O3',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS 
-fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='3.3.2', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.3.2'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: MULTIPLICITY USE_ITHREADS USE_LARGE_FILES 
PERL_IMPLICIT_CONTEXT
  Built under linux
  Compiled at Dec 20 2003 03:01:43
  %ENV:
    PERL_LWP_USE_HTTP_10="1"
  @INC:
    /usr/lib/perl5/5.8.2/i686-linux-thread-multi
    /usr/lib/perl5/5.8.2
    /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.2
    /usr/lib/perl5/site_perl/5.8.1/i686-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.1
    /usr/lib/perl5/site_perl
    .

*** Packages of interest status:

Apache::Request: 2.02-dev
CGI            : 3.04
LWP            : 5.69
mod_perl       : 1.9913


3. This is the core dump trace: (if you get a core dump):

  [CORE TRACE COMES HERE]

This report was generated by t/REPORT on Thu Jan 29 10:32:23 2004 GMT.

-------------8<---------- End Bug Report --------------8<----------

Note: Complete the rest of the details and post this bug report to
dev <at> perl.apache.org. To subscribe to the list send an empty
email to dev-subscribe@perl.apache.org.

Aloha => Beau;



-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html


Re: [mp2] Attempt to free unreferenced scalar: ...

Posted by "Beau E. Cox" <be...@beaucox.com>.
On Friday 30 January 2004 07:03 pm, Stas Bekman wrote:
> Beau E. Cox wrote:
> > -------------8<---------- Start Bug Report ------------8<----------
> > 1. Problem Description:
> >
> > I am trying to port Mason to mod_perl2 w/libapreq2. It seems I have
> > munged it up. When 'stressing' the site (downloading a Mason-enabled uri
> > with wget in a looping shell script), I get lots of
> >
> > Attempt to free unreferenced scalar: SV 0x405e6e78 at
> > /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
> > Attempt to free unreferenced scalar: SV 0x405e6e78 at
> > /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
> > Attempt to free unreferenced scalar: SV 0x405e6e78 at
> > /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
> > ...
[snipped]
> I bet you won't see any of these under prefork. It's most likely the issue
> of perl_clone(), when a cloned variable is attempted to be destroyed more
> than once or may be it's the the interpreter scoping bug that yours truly
> has introduced in perl 5.8.2 (later removed in 5.8.3) trying to fix some
> other hairy problem. So first try upgrading to DBI (which is now should
> work just fine with 5.8.2). Or even better upgrade to 5.8.3.
[snipped]

OK!

Moved to perl 5.8.3, recompiled ALL my site-perl CPAN modules,
and rebuild mod_perl. The problem went away!

Many thanks.

Aloha => Beau;


-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html


Re: [mp2] Attempt to free unreferenced scalar: ...

Posted by Stas Bekman <st...@stason.org>.
Beau E. Cox wrote:
> -------------8<---------- Start Bug Report ------------8<----------
> 1. Problem Description:
> 
> I am trying to port Mason to mod_perl2 w/libapreq2. It seems I have munged it
> up. When 'stressing' the site (downloading a Mason-enabled uri with
> wget in a looping shell script), I get lots of
> 
> Attempt to free unreferenced scalar: SV 0x405e6e78 at 
> /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
> Attempt to free unreferenced scalar: SV 0x405e6e78 at 
> /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
> Attempt to free unreferenced scalar: SV 0x405e6e78 at 
> /usr/lib/perl5/site_perl/5.8.2/i686-linux-thread-multi/DBI.pm line 626.
> ...
> 
> Not just in DBI.pm; Lots of others: HTML::Parser, HTML::Mason::Requesr,
> etc. The lines in quesion always show:
> $somevar = delete $some_hash_passed_as_an_arg{somekey};
> 
> Now, the REALLY crazy part: the address shown is ALWAYS
> SV 0x405e6e78 - this must be someting other than the scalar's
> address, right? The address of the execption routine catching
> the problem?
> 
> Stressing a non-Mason-enabled uri does NOT fail.
> 
> Are there any tools I can use to pinpoint my bug?
[...]
>  -D APACHE_MPM_DIR="server/mpm/worker"

I bet you won't see any of these under prefork. It's most likely the issue of 
perl_clone(), when a cloned variable is attempted to be destroyed more than 
once or may be it's the the interpreter scoping bug that yours truly has 
introduced in perl 5.8.2 (later removed in 5.8.3) trying to fix some other 
hairy problem. So first try upgrading to DBI (which is now should work just 
fine with 5.8.2). Or even better upgrade to 5.8.3.

You should be able to reproduce it with standalone perl when using perl 
threads. see p5p archives for the discussion on this issue.

Please see this thread:
http://marc.theaimsgroup.com/?t=107425078400004&r=1&w=2
I've cc'ed Kurt and Steve (Who had the same problem), may be they have some 
news regarding it.

In any case please report back the outcoming. Thanks.
__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

-- 
Reporting bugs: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html