RE: memory leak in DBI XS bootstrap code
- From: E.Dan@xxxxxx (Ephraim Dan)
- Date: Thu, 29 Jun 2006 06:52:56 -0700
I don't see what you mean in the "INSTALL" that comes with perl 5.8.0 (that's what we're using). Can you be more specific? Would I need to build perl in a special way, or DBI, or both?
I was sort of hoping someone more familiar with the code might be able to pinpoint it (of course, this is always preferable to doing it myself).
Any further pointers are appreciated...
-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) 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: Tim Bunce
- Re: memory leak in DBI XS bootstrap code
- Prev by Date: Re: memory leak in DBI XS bootstrap code
- Next by Date: I18N in Oracle documentation
- 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
|