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/auto/DBI/DBI.so) XS_DBI__install_method (in /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/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 <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 patch to DBI 1.51 as soon as someone has one. Thanks, Ephraim Dan