Re: memory leak in DBI XS bootstrap code
am 29.06.2006 13:46:42 von Tim.BunceTry 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 DBI bootstrap 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.
>
> The problem appears to be in the following routines:
>
> boot_DBI (in /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/aut o/DBI/DBI.so)
> XS_DBI__install_method (in /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/aut o/DBI/DBI.so)
>
> I am using DBI 1.51
>
> The tool "valgrind" (http://valgrind.org) can be used to reproduce the leak using the following code:
>
> ---
> File: embed_test.c
> ---
>
> #include
> #include
>
> 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 patch to DBI 1.51 as soon as someone has one.
>
> Thanks,
> Ephraim Dan
>