Please ignore my questions below.  I have found the cause of the memory
leak.
Thanks.

Regards,
Michael


__________________

Hi,

Using Perl 5.8.1 DBI 1.48 and DBD-DB2 0.78 on Linux, I'm seeing a memory
leak looping through $sth->{NAME_lc}.
The repro script and trace is below.  Note that looping through the
$dbh->prepare does not leak.

Has someone else seen this before?  or know where I can start looking?
This looks like a leak in DBI since the DBD-DB2 does not touch the NAME_lc
attribute.

Any suggestion/comment/help would be greatly appreciated!
Thanks


Repro script:

use DBI;
$tracelevel=9;
$trace_filename="Trace.out";
DBI->trace($tracelevel, $trace_filename);

my $dbh = DBI->connect( 'dbi:DB2:sample', '', '' ) || die "Unable to
connect: $DBI::errstr\n";
while( 1 )
{
   my $sth = $dbh->prepare("SELECT procname FROM syscat.procedures");
   my $x = $sth->{NAME_lc};
   print ".";
}


$uname -a
Linux cox32.torolab.ibm.com 2.4.21-20.EL #1 Wed Aug 18 20:58:25 EDT 2004
i686 i686 i386 GNU/Linux
(Perl 5.8, DBI 1.48, DBD-DB2 0.78 )


The Trace.out:

DBI 1.48-ithread default trace level set to 0x0/9 (pid 30282)
    Note: perl is running without the recommended perl -w option
    -> DBI->connect(dbi:DB2:sample, , ****)
    -> DBI->install_driver(DB2) for linux perl=5.008 pid=30282 ruid=7839
euid=7839
       install_driver: DBD::DB2 version 0.78 loaded from
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBD/DB2.pm
    New DBI::dr (for DBD::DB2::dr, parent=, id=)
    dbih_setup_handle(DBI::dr=HASH(0x99c8c4c)=>DBI::dr=HASH(0x9a6f8a0),
DBD::DB2::dr, 0, Null!)
    dbih_make_com(Null!, 0, DBD::DB2::dr, 96, 0) thr#98bd008
    dbih_setup_attrib(DBI::dr=HASH(0x9a6f8a0), Err, Null!)
SCALAR(0x9babcac) (already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x9a6f8a0), State, Null!)
SCALAR(0x9a64740) (already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x9a6f8a0), Errstr, Null!)
SCALAR(0x9a58e8c) (already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x9a6f8a0), TraceLevel, Null!) 0
(already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x9a6f8a0), FetchHashKeyName, Null!)
'NAME' (already defined)
    <- install_driver= DBI::dr=HASH(0x99c8c4c)
    >> connect     DISPATCH (DBI::dr=HASH(0x99c8c4c) rc2/3 @5 g0 ima1
pid#30282) at /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm
line 598
    !! warn: 0 CLEARED by call to connect method
    -> connect for DBD::DB2::dr (DBI::dr=HASH(0x99c8c4c)~0x9a6f8a0 'sample'
'' **** HASH(0x9a707e0)) thr#98bd008
    New DBI::db (for DBD::DB2::db, parent=DBI::dr=HASH(0x9a6f8a0), id=)
    dbih_setup_handle(DBI::db=HASH(0x9a6f864)=>DBI::db=HASH(0x9a70858),
DBD::DB2::db, 99c89a0, Null!)
    dbih_make_com(DBI::dr=HASH(0x9a6f8a0), 9a58e00, DBD::DB2::db, 104, 0)
thr#98bd008
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), Err,
DBI::dr=HASH(0x9a6f8a0)) SCALAR(0x99ced30) (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), State,
DBI::dr=HASH(0x9a6f8a0)) SCALAR(0x99ced90) (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), Errstr,
DBI::dr=HASH(0x9a6f8a0)) SCALAR(0x99ced60) (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), TraceLevel,
DBI::dr=HASH(0x9a6f8a0)) 0 (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), FetchHashKeyName,
DBI::dr=HASH(0x9a6f8a0)) 'NAME' (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), HandleSetErr,
DBI::dr=HASH(0x9a6f8a0)) undef (not defined)
    dbih_setup_attrib(DBI::db=HASH(0x9a70858), HandleError,
DBI::dr=HASH(0x9a6f8a0)) undef (not defined)
connect 'sample', '', ''    <- connect= DBI::db=HASH(0x9a6f864) at
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm line 598
    >> STORE       DISPATCH (DBI::db=HASH(0x9a70858) rc2/1 @3 g0 ima41c
pid#30282) at /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm
line 645
    -> STORE for DBD::DB2::db (DBI::db=HASH(0x9a70858)~INNER 'PrintError'
1) thr#98bd008
    STORE DBI::db=HASH(0x9a70858) 'PrintError' => 1
    <- STORE= 1 at /usr/lib/perl5/site_perl/5.8.0
/i386-linux-thread-multi/DBI.pm line 645
    >> STORE       DISPATCH (DBI::db=HASH(0x9a70858) rc2/1 @3 g0 ima41c
pid#30282) at /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm
line 645
    -> STORE for DBD::DB2::db (DBI::db=HASH(0x9a70858)~INNER 'AutoCommit'
1) thr#98bd008
    <- STORE= 1 at /usr/lib/perl5/site_perl/5.8.0
/i386-linux-thread-multi/DBI.pm line 645
    >> STORE       DISPATCH (DBI::db=HASH(0x9a70858) rc2/1 @3 g0 ima41c
pid#30282) at /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm
line 648 via repro.pl line 10
    -> STORE for DBD::DB2::db (DBI::db=HASH(0x9a70858)~INNER 'Username' '')
thr#98bd008
    STORE DBI::db=HASH(0x9a70858) 'Username' => ''
    <- STORE= 1 at /usr/lib/perl5/site_perl/5.8.0
/i386-linux-thread-multi/DBI.pm line 648 via repro.pl line 10
    >> FETCH       DISPATCH (DBI::db=HASH(0x9a70858) rc2/1 @2 g0 ima404
pid#30282) at /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm
line 648
    <> FETCH= '' ('Username' from cache) at /usr/lib/perl5/site_perl/5.8.0
/i386-linux-thread-multi/DBI.pm line 648
    <- connect= DBI::db=HASH(0x9a6f864)
    >> STORE       DISPATCH (DBI::db=HASH(0x9a70858) rc2/1 @3 g0 ima41c
pid#30282) at /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/DBI.pm
line 668 via repro.pl line 10
    -> STORE for DBD::DB2::db (DBI::db=HASH(0x9a70858)~INNER
'dbi_connect_closure' CODE(0x9a6f7b0)) thr#98bd008
    STORE DBI::db=HASH(0x9a70858) 'dbi_connect_closure' => CODE(0x9a6f7b0)
    <- STORE= 1 at /usr/lib/perl5/site_perl/5.8.0
/i386-linux-thread-multi/DBI.pm line 668 via repro.pl line 10
    >> prepare     DISPATCH (DBI::db=HASH(0x9a6f864) rc1/1 @2 g0 ima2201
pid#30282) at repro.pl line 14
    -> prepare for DBD::DB2::db (DBI::db=HASH(0x9a6f864)~0x9a70858 'SELECT
procname FROM syscat.procedures') thr#98bd008
    New DBI::st (for DBD::DB2::st, parent=DBI::db=HASH(0x9a70858), id=)
    dbih_setup_handle(DBI::st=HASH(0x9a708dc)=>DBI::st=HASH(0x9a708d0),
DBD::DB2::st, 9a708e8, Null!)
    dbih_make_com(DBI::db=HASH(0x9a70858), 9978b28, DBD::DB2::st, 160, 0)
thr#98bd008
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), Err,
DBI::db=HASH(0x9a70858)) SCALAR(0x99ced30) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), State,
DBI::db=HASH(0x9a70858)) SCALAR(0x99ced90) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), Errstr,
DBI::db=HASH(0x9a70858)) SCALAR(0x99ced60) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), TraceLevel,
DBI::db=HASH(0x9a70858)) 0 (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), FetchHashKeyName,
DBI::db=HASH(0x9a70858)) 'NAME' (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), HandleSetErr,
DBI::db=HASH(0x9a70858)) undef (not defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a708d0), HandleError,
DBI::db=HASH(0x9a70858)) undef (not defined)
    dbd_st_prepare'd sql f65537
      SELECT procname FROM syscat.procedures
fbh 0: 'PROCNAME' , type 12,  128, dsize 128, p0 s4335563
   out: ftype 1, indp 0, bufl 129, rlen 129
    <- prepare= DBI::st=HASH(0x9a708dc) at repro.pl line 14
    >> FETCH       DISPATCH (DBI::st=HASH(0x9a708d0) rc2/1 @2 g0 ima404
pid#30282) at repro.pl line 15
    -> FETCH for DBD::DB2::st (DBI::st=HASH(0x9a708d0)~INNER 'NAME_lc')
thr#98bd008
    >> FETCH       DISPATCH (DBI::st=HASH(0x9a708d0) rc3/1 @2 g0 ima404
pid#30282) at repro.pl line 15
1   -> FETCH for DBD::DB2::st (DBI::st=HASH(0x9a708d0)~INNER 'NAME')
thr#98bd008
1   <- FETCH= [ 'PROCNAME' ] at repro.pl line 15
    .. FETCH DBI::st=HASH(0x9a708d0) 'NAME_lc' = ARRAY(0x9a70a38) (cached)
    <- FETCH= [ 'procname' ] at repro.pl line 15
    >> DESTROY     DISPATCH (DBI::st=HASH(0x9a708dc) rc1/1 @1 g0 ima4
pid#30282) at repro.pl line 16
    <> DESTROY(DBI::st=HASH(0x9a708dc)) ignored for outer handle (inner
DBI::st=HASH(0x9a708d0) has ref cnt 1)
    >> DESTROY     DISPATCH (DBI::st=HASH(0x9a708d0) rc1/1 @1 g0 ima4
pid#30282) at repro.pl line 16
    -> DESTROY for DBD::DB2::st (DBI::st=HASH(0x9a708d0)~INNER) thr#98bd008
    <- DESTROY= undef at repro.pl line 16
    DESTROY (dbih_clearcom) (sth 0x9a708dc, com 0x9a36b90, imp
DBD::DB2::st):
       FLAGS 0x111: COMSET Warn PrintError
       PARENT DBI::db=HASH(0x9a70858)
       KIDS 0 (0 Active)
       IMP_DATA undef
       LongReadLen 32700
       NUM_OF_FIELDS 1
       NUM_OF_PARAMS 0
    dbih_clearcom 0x9a708dc (com 0x9a36b90, type 3) done.

    >> prepare     DISPATCH (DBI::db=HASH(0x9a6f864) rc1/1 @2 g0 ima2201
pid#30282) at repro.pl line 14
    -> prepare for DBD::DB2::db (DBI::db=HASH(0x9a6f864)~0x9a70858 'SELECT
procname FROM syscat.procedures') thr#98bd008
    New DBI::st (for DBD::DB2::st, parent=DBI::db=HASH(0x9a70858), id=)
    dbih_setup_handle(DBI::st=HASH(0x9a70984)=>DBI::st=HASH(0x9a70aa4),
DBD::DB2::st, 9a7099c, Null!)
    dbih_make_com(DBI::db=HASH(0x9a70858), 9978b28, DBD::DB2::st, 160, 0)
thr#98bd008
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), Err,
DBI::db=HASH(0x9a70858)) SCALAR(0x99ced30) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), State,
DBI::db=HASH(0x9a70858)) SCALAR(0x99ced90) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), Errstr,
DBI::db=HASH(0x9a70858)) SCALAR(0x99ced60) (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), TraceLevel,
DBI::db=HASH(0x9a70858)) 0 (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), FetchHashKeyName,
DBI::db=HASH(0x9a70858)) 'NAME' (already defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), HandleSetErr,
DBI::db=HASH(0x9a70858)) undef (not defined)
    dbih_setup_attrib(DBI::st=HASH(0x9a70aa4), HandleError,
DBI::db=HASH(0x9a70858)) undef (not defined)
    dbd_st_prepare'd sql f65537
      SELECT procname FROM syscat.procedures
fbh 0: 'PROCNAME' , type 12,  128, dsize 128, p0 s4335563
   out: ftype 1, indp 0, bufl 129, rlen 129
    <- prepare= DBI::st=HASH(0x9a70984) at repro.pl line 14
    >> FETCH       DISPATCH (DBI::st=HASH(0x9a70aa4) rc2/1 @2 g0 ima404
pid#30282) at repro.pl line 15
    -> FETCH for DBD::DB2::st (DBI::st=HASH(0x9a70aa4)~INNER 'NAME_lc')
thr#98bd008
    >> FETCH       DISPATCH (DBI::st=HASH(0x9a70aa4) rc3/1 @2 g0 ima404
pid#30282) at repro.pl line 15
1   -> FETCH for DBD::DB2::st (DBI::st=HASH(0x9a70aa4)~INNER 'NAME')
thr#98bd008
1   <- FETCH= [ 'PROCNAME' ] at repro.pl line 15
    .. FETCH DBI::st=HASH(0x9a70aa4) 'NAME_lc' = ARRAY(0x9a708e8) (cached)
    <- FETCH= [ 'procname' ] at repro.pl line 15
    >> DESTROY     DISPATCH (DBI::st=HASH(0x9a70984) rc1/1 @1 g0 ima4
pid#30282) at repro.pl line 16
    <> DESTROY(DBI::st=HASH(0x9a70984)) ignored for outer handle (inner
DBI::st=HASH(0x9a70aa4) has ref cnt 1)
    >> DESTROY     DISPATCH (DBI::st=HASH(0x9a70aa4) rc1/1 @1 g0 ima4
pid#30282) at repro.pl line 16
    -> DESTROY for DBD::DB2::st (DBI::st=HASH(0x9a70aa4)~INNER) thr#98bd008
    <- DESTROY= undef at repro.pl line 16
    DESTROY (dbih_clearcom) (sth 0x9a70984, com 0x9a70490, imp
DBD::DB2::st):
       FLAGS 0x111: COMSET Warn PrintError
       PARENT DBI::db=HASH(0x9a70858)
       KIDS 0 (0 Active)
       IMP_DATA undef
       LongReadLen 32700
       NUM_OF_FIELDS 1
       NUM_OF_PARAMS 0
    dbih_clearcom 0x9a70984 (com 0x9a70490, type 3) done.


... then repeats back to line beginning with    >> prepare



Regards,
Michael



                                                                           
             Tim Bunce                                                     
             <[EMAIL PROTECTED]                                             
             com>                                                       To 
                                       dbi-announce@perl.org               
             03/14/2005 12:24                                           cc 
             PM                        dbi-users@perl.org                  
                                                                   Subject 
                                       ANNOUNCE DBI 1.48                   
             Please respond to                                             
                 dbi-users                                                 
                                                                           
                                                                           
                                                                           
                                                                           




  file: $CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz
  size: 378698 bytes
   md5: 87396e1a9c06d1190f1ca70e1da1163e

=head2 Changes in DBI 1.48 (svn rev 928),    14th March 2005

  Fixed DBI::DBD::Metadata generation of type_info_all thanks to Steffen
    Goeldner
    (driver authors who have used it should rerun it).

  Updated docs for NULL Value placeholders thanks to Brian Campbell.

  Added multi-keyfield nested hash fetching to fetchall_hashref()
    thanks to Zhuang (John) Li for polishing up my draft.
  Added registered driver prefixes: amzn_ for DBD::Amazon and yaswi_ for
  DBD::Yaswi.

=cut

Enjoy!

 Tim.

Reply via email to