Hello Christian,
On 06/09/2009 01:14 PM, Christian Koch wrote:
Hello Daniel,
Daniel-Constantin Mierla schrieb:
Do you call pv_parse_ht_name() from perl? If not,
that function is
executed only at startup and it is not a cause for leaking. A clean
shutdown should free it, but there is not complete support for it
(some fixup functions have a free function, others done, as well as
the script actions tree).
We're not calling this directly from perl, but it
seems it is called
automatically every time when accessing the pv $sht.
unfortunately you cannot use
$sht in this way from perl module. The same
limitation that prevent calling any function from modules apply here --
the fixup system used at startup, when string parameters are
pre-compiled in different forms to speed up runtime execution.
It can be added as a feature request for future. For module functions I
added the core support for free fixup functions, but nobody committed to
continue the work in perl module.
If you want to work on it, I can assist and guide you.
Cheers,
Daniel
We've modified ht_var.c from module htable for
getting a backtrace
every time memory is allocated in pv_parse_ht_name:
void printBacktrace()
{
void *array[100];
size_t size;
char **strings;
size_t i;
size = backtrace (array, 100);
strings = backtrace_symbols (array, size);
LM_DBG("Obtained %zd stack frames.\n", size);
for (i = 0; i < size; i++)
LM_DBG("%s\n", strings[i]);
free (strings);
}
int pv_parse_ht_name(pv_spec_p sp, str *in)
{
ht_pv_t *hpv=NULL;
char *p;
str pvs;
if(in->s==NULL || in->len<=0)
return -1;
hpv = (ht_pv_t*)pkg_malloc(sizeof(ht_pv_t));
if(hpv==NULL)
return -1;
LM_DBG("Allocated new memory %u/0x%x in
pv_parse_ht_name()", hpv, hpv);
printBacktrace();
[...]
When making a call we get the following outputs:
xlog:
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:pv_parse_ht_name: Allocated new memory 136020048 in
pv_parse_ht_name()
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace: Obtained 10 stack frames.
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/htable.so(printBacktrace+0x2d)
[0x1dd1c5]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/htable.so(pv_parse_ht_name+0x8f)
[0x1dd8fe]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(pv_parse_spec+0x58f) [0x8082c35]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(pv_parse_format+0x1eb) [0x808409e]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace: /usr/local/lib/kamailio/modules/xlog.so
[0x1482c6]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace: /usr/local/lib/kamailio/modules/xlog.so
[0x148620]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace: /usr/local/sbin/kamailio [0x808e68e]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace: /usr/local/sbin/kamailio(fix_rls+0x12b)
[0x8096892]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace: /usr/local/sbin/kamailio(main+0xcd)
[0x8068215]
May 29 16:56:01 AmbriaSip1 /usr/local/sbin/kamailio[27187]:
DBG:htable:printBacktrace:
/lib/tls/libc.so.6(__libc_start_main+0xd3) [0xb51df3]
and perl:
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:pv_parse_ht_name: Allocated new memory
136017028/0x81b7484 in pv_parse_ht_name()
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace: Obtained 27 stack frames.
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/htable.so(printBacktrace+0x33)
[0xf631cb]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/htable.so(pv_parse_ht_name+0x8f)
[0xf63a42]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(pv_parse_spec+0x58f) [0x8082c35]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(pv_parse_format+0x1eb) [0x808409e]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/perl.so(pv_sprintf+0x93) [0x2a40c8]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/perl.so(XS_OpenSER__Message_pseudoVar+0x17f)
[0x2a92f3]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/libperl.so(Perl_pp_entersub+0x2ea)
[0x813c
b2]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/libperl.so(Perl_runops_debug+0xba)
[0x7f71
6d]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/libperl.so
[0x7a1b26]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/libperl.so(Perl_call_sv+0x6d7)
[0x7a7ef1]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE/libperl.so(Perl_call_pv+0x40)
[0x7a81f9]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/perl.so(perl_exec2+0x198) [0x2af1c4]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/lib/kamailio/modules/perl.so(perl_exec1+0x2c) [0x2af69d]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(do_action+0x1401) [0x80531ed]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(run_action_list+0x28) [0x8055406]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(do_action+0x20ed) [0x8053ed9]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(run_action_list+0x28) [0x8055406]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(do_action+0x3199) [0x8054f85]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(run_action_list+0x28) [0x8055406]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(do_action+0x3199) [0x8054f85]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(run_action_list+0x28) [0x8055406]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(run_top_route+0x6d) [0x805570e]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(receive_msg+0x572) [0x8087934]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/usr/local/sbin/kamailio(udp_rcv_loop+0xd26) [0x80be5a6]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace: /usr/local/sbin/kamailio(main+0x3219)
[0x806b361]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace:
/lib/tls/libc.so.6(__libc_start_main+0xd3) [0xb51df3]
Jun 2 10:53:28 AmbriaSip1 /usr/local/sbin/kamailio[19777]:
DBG:htable:printBacktrace: /usr/local/sbin/kamailio [0x8051991]
So because of this we don't think it is just called once but the
allocated memory should be freed after processing a message.
That structure is not freed because it used at runtime. During
startup, the name of $sht is parsed and kept as custom structure to
be used latter, for speed reasons.
I tried to access the files you uploaded, with the log, but they
expired. If you have the one with memory debug, please send it to me.
We still
have it, but its 43MB (already zipped) and it's without the
above "printBacktrace". If you need it anyway or need a complete
logfile including the backtrace we could send it to you.
Thanks for your help,
Christian
------------------------------------------------------------------------
_______________________________________________
Kamailio (OpenSER) - Users mailing list
Users(a)lists.kamailio.org
http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
http://lists.openser-project.org/cgi-bin/mailman/listinfo/users
--
Daniel-Constantin Mierla
http://www.asipto.com/