Hi, I'm trying to write a persistent perl daemon, but have noticed what
looks like a memory leak, with perl_parse.
It only seems to occur once dynamic loading of perl modules is enabled, here
is my test kit:
code in showtime.c:
#include <EXTERN.h>
#include <perl.h>
#include <stdio.h>
EXTERN_C void xs_init(pTHX);
int main(int argc, char **argv, char **env) {
char *args[] = { NULL };
PERL_SYS_INIT3(&argc,&argv,&env);
int j;
for(j=100000; j>0; --j) {
PerlInterpreter *my_perl = perl_alloc();
perl_construct(my_perl);
perl_parse(my_perl, xs_init, argc, argv, NULL);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
perl_destruct(my_perl);
perl_free(my_perl);
}
PERL_SYS_TERM();
}
to compile:
# perl -MExtUtils::Embed -e xsinit
# cc -c perlxsi.c `perl -MExtUtils::Embed -e ccopts`
# cc -c showtime.c `perl -MExtUtils::Embed -e ccopts`
# cc -o showtime perlxsi.o showtime.o `perl -MExtUtils::Embed -e ldopts`
To run:
# ./showtime -e "use Time::HiRes;" &
# watch -d ps u $!
Notice RSS size keeps on getting larger, 20k/sec
Works with other modules aswell
# perl -v
This is perl, v5.10.0 built for i486-linux-gnu-thread-multi
This wouldn't be a problem normally as I could simply dump the process after
x calls, however writing this into a pthreaded app makes it very hard to
dump & recreate the process.
I've run valgrind over it, and it cannot find any memory leaks..
Any help would be much appreciated..
Cheers
James Shirley