[Kamailio-Users] freeing innername from htable Re: perl module, "pv_sprintf: Memory exhausted!"

Christian Koch chri.koch.vier at googlemail.com
Tue Jun 9 12:14:36 CEST 2009


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. 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/users/attachments/20090609/c72b4581/attachment.htm>


More information about the Users mailing list