Re: memory leak in DBI XS bootstrap code
- From: Tim.Bunce@xxxxxxxxx (Tim Bunce)
- Date: Fri, 30 Jun 2006 10:35:31 +0100
On Fri, Jun 30, 2006 at 12:24:33AM -0700, Ephraim Dan wrote:
I don't see what you mean in the "INSTALL" that comes with perl 5.8.0 (that's what we're using).The file called INSTALL in the perl source code directory.
That I knew. What are the special instructions that I'm supposed to
find there? Am I supposed to build it with debugging? Can you
specify what special configuration exactly you meant that I should use?
I'm sorry. I should have checked myself first. You can build perl with
-DPURIFY to enable more precise leak detection.
It looks like the leak in boot_DBI is on purpose:
/* Remember the last handle used. BEWARE! Sneaky stuff here! */
/* We want a handle reference but we don't want to increment */
/* the handle's reference count and we don't want perl to try */
/* to destroy it during global destruction. Take care! */
DBI_UNSET_LAST_HANDLE; /* ensure setup the correct way */
Why is this being done, and does anyone have a way to fix it? Why don't we want perl to destroy it? Me, that's exactly what I want.
I don't believe that's a leak. It's just using an SV as a reference
without telling perl its a reference. If perl knew it was a reference
we'd get double-free warnings as the referenced value would be freed twice.
The leak is probably the DBIS structure itself:
Newz(dummy, DBIS, 1, dbistate_t);
That should probably be using along the lines of:
sv = newSV(sizeof(struct dbistate_st));
DBIS = (struct dbistate_st*)SvPVX(sv);
memzero(DBIS, sizeof(struct dbistate_st));
So the memory is allocated within an SV so gets freed on global destruction.
Still looking into the other leak in _install_method... any pointers still appreciated... Thanks for your help so far, Tim.
I've taken a look at the code. I'd guess that it's due to savepnv:
ima->usage_msg = savepv( (svp) ? SvPV(*svp,lna) : "");
But
Tim.
-edan.
-----Original Message-----
From: Tim Bunce [mailto:Tim.Bunce@xxxxxxxxx]
Sent: Thursday, June 29, 2006 14:47
To: Ephraim Dan
Cc: dbi-users@xxxxxxxx
Subject: Re: memory leak in DBI XS bootstrap code
Try building perl with options to make valgrind leak tracing more
effective (see perl's INSTALL file). That may help you pinpoint
the problem.
Tim.
On Thu, Jun 29, 2006 at 04:33:40AM -0700, Ephraim Dan wrote:
I am experiencing what I believe to be a memory leak in the DBIbootstrap code. This is a problem for me because I am embedding perl in a
long-running program, and DBI is being loaded over and over, so my program
grows and grows.
multi/auto/DBI/DBI.so)
The problem appears to be in the following routines:
boot_DBI (in /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-
XS_DBI__install_method (in /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/DBI.so)
leak using the following code:
I am using DBI 1.51
The tool "valgrind" (http://valgrind.org <http://valgrind.org/> ) can be used to reproduce the
patch to DBI 1.51 as soon as someone has one.
---
File: embed_test.c
---
#include <EXTERN.h> /* from the Perl distribution */
#include <perl.h> /* from the Perl distribution */
static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
EXTERN_C void xs_init (pTHX); /*** init dyn. loading ***/
int main(int argc, char **argv, char **env)
{
char *embedding[] = { "", "-e", "0" };
my_perl = perl_alloc();
perl_construct(my_perl);
perl_parse(my_perl, xs_init, 3, embedding, (char **)NULL);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
perl_run(my_perl);
eval_pv("use DBI", TRUE);
perl_destruct(my_perl);
perl_free(my_perl);
}
---
File: Makefile
---
CC_OPTS = $(shell perl -MExtUtils::Embed -e ccopts)
LD_OPTS = $(shell perl -MExtUtils::Embed -e ldopts)
EXE = embed_test
$(EXE): xsinit.o embed_test.o
gcc -o $(EXE) embed_test.o xsinit.o $(LD_OPTS)
embed_test.o: embed_test.c
gcc -c embed_test.c $(CC_OPTS)
xsinit.o: xsinit.c
gcc -c xsinit.c $(CC_OPTS)
xsinit.c:
perl -MExtUtils::Embed -e xsinit -- -o xsinit.c
clean:
rm -f *.o xsinit.c $(EXE)
---
EOF
---
Can anyone suggest a fix for this? I'd be more than willing to take a
Thanks,
Ephraim Dan
- Follow-Ups:
- RE: memory leak in DBI XS bootstrap code
- From: Ephraim Dan
- RE: memory leak in DBI XS bootstrap code
- References:
- RE: memory leak in DBI XS bootstrap code
- From: Ephraim Dan
- Re: memory leak in DBI XS bootstrap code
- From: Tim Bunce
- RE: memory leak in DBI XS bootstrap code
- From: Ephraim Dan
- RE: memory leak in DBI XS bootstrap code
- Prev by Date: make test fails for DBD::ODBC on Solaris 5.8 with openlink driver
- Next by Date: RE: memory leak in DBI XS bootstrap code
- Previous by thread: RE: memory leak in DBI XS bootstrap code
- Next by thread: RE: memory leak in DBI XS bootstrap code
- Index(es):
Relevant Pages
|
|