ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl5-porters
perl5-porters
[ID 20000928.004] mysterious extra refcount in debugger
by Andrew Pimlott other posts by this author
Sep 29 2000 2:10AM messages near this date
Re: SuSE's gcc-2.95.2 and //depot/perl | Re: [ID 20000928.004] mysterious extra refcount in debugger
This is a bug report for perl from pimlott@[...].com,
generated with the help of perlbug 1.26 running under perl 5.00503.


-----------------------------------------------------------------
[Please enter your report here]

I found that, under the debugger only, an object wasn't getting destroyed
when expected.  Using Devel::Peek, I found that the object had a mysterious
extra reference under the debugger.  I worked it down to a minimal test
case, but I'm still baffled so I won't even guess at the cause.

    package Foo;

    sub mydo { &{$_[0]} }

    sub new {
        my $self = {};
        mydo sub { $self };  # This is the culprit; no idea why
        return bless $self =>  'Foo';
    }
    sub DESTROY { warn "destroying\n"; }

    package main;

    $foo = new Foo;
    warn "one down\n";
    $foo = new Foo;
    warn "two down\n";

When run normally, this prints

    one down
    destroying
    two down
    destroying

as expected.  But under the debugger, the destructors are not run until
after the program ends and I quit the debugger.  Devel::Peek tells me that,
after the first "new Foo" line, %$foo has 2 references under the debugger,
instead of the normal 1.  However, right before the return statement in new,
$self has only one reference.  Somehow, it picks up the extra reference in
the process of returning from new--but only under the debugger.

Please tell me if there's anything else I can do to help, as I'm very
bothered by this bug.  (It's making it difficult for me to debug a program
under the debugger, since resources are not freed and so it eventually
crashes.)

Also duplicated on 5.005_03 on Solaris 2.7.

Thanks,
Andrew

[Please do not change anything below this line]
-----------------------------------------------------------------

---
Site configuration information for perl 5.00503:

Configured by drow at Sun Apr 30 12:07:23 EDT 2000.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=linux, osvers=2.2.15pre14, archname=i386-linux
    uname='linux them 2.2.15pre14 #2 smp mon mar 13 14:29:00 est 2000 i686 unknown '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='-O2 ', gccversion=2.95.2 20000313 (Debian GNU/Linux)
    cppflags='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN -I/usr/local/include'
    ccflags ='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN -I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
    libc=, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:
    

---
@INC for perl 5.00503:
    /home/pimlott/idiom/perl
    /usr/lib/perl5/5.005/i386-linux
    /usr/lib/perl5/5.005
    /usr/local/lib/site_perl/i386-linux
    /usr/local/lib/site_perl
    /usr/lib/perl5
    .

---
Environment for perl 5.00503:
    HOME=/home/pimlott
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/pimlott/bin:/usr/local/atria/bin:/usr/sbin:/sbin:/home/pimlott/bin:/usr/local
/atria/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
    PERL5LIB=/home/pimlott/idiom/perl
    PERL_BADLANG (unset)
    SHELL=/usr/bin/zsh
Thread:
Andrew Pimlott
Andrew Pimlott

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved