[OpenSIPS-Users] Possible dispatcher module memory leak
Bogdan-Andrei Iancu
bogdan at voice-system.ro
Sat Dec 20 18:57:36 CET 2008
Hi Chad,
The fix is available on both trunk and 1.4 branches - please update from
svn (see revision 5087 / 5088) :
http://opensips.svn.sourceforge.net/opensips/?rev=5088&view=rev
Regards,
Bogdan
Bogdan-Andrei Iancu wrote:
> Hi Chad,
>
> Thank you for the report - I made a check and I can confirm your sayings
> about the leak. I will verify why a dialog tm function is sent and not a
> simple one.
> I will come back to you asap.
>
> Regards,
> Bogdan
>
> Fox, Chad wrote:
>
>> We have experienced an issue where a device in our dispatcher list
>> becomes unavailable and the dispatcher has to begin probing that resource.
>>
>> We noticed that the memory grows at a constant rate after this happens
>> and until the device is brought back online.
>>
>> Inspecting the memory allocated by shm_malloc we see that the leaked
>> memory is made up of dlg_t objects and strings allocated via shm_str_dup.
>>
>> Looking at the ds_check_timer() function we see where the dlg_t
>> objects and strings are allocated by a call to new_dlg_uac from
>> t_request_outside().
>>
>> Is it the dispatcher module’s job to shm_free the dialog memory, or
>> does tm free it on it’s own?
>>
>> <modules/dispatcher/dispatch.c> (openser 1.3.2)
>>
>> void ds_check_timer(unsigned int ticks, void* param)
>>
>> {
>>
>> …
>>
>> dlg_t * dialog;
>>
>> …
>>
>> /* Iterate over the groups and the entries of each group: */
>>
>> for(list = _ds_list; list!= NULL; list= list->next)
>>
>> {
>>
>> for(j=0; j<list->nr; j++)
>>
>> {
>>
>> /* If the Flag of the entry has "Probing set, send a probe: */
>>
>> if ((list->dlist[j].flags&DS_PROBING_DST) > 0)
>>
>> {
>>
>> …
>>
>> /* Execute the Dialog using the "req_outside"-Method of the
>>
>> * TM-Module.
>>
>> * req_outside(str* m, str* t, str* f, str* h, str* b,
>>
>> * dlg_t** d, transaction_cb c, void* cp); */
>>
>> if (tmb.t_request_outside(&ds_ping_method,
>>
>> &list->dlist[j].uri,
>>
>> &ds_ping_from,
>>
>> NULL,
>>
>> NULL,
>>
>> &dialog,
>>
>> ds_options_callback,
>>
>> (void*)(long)list->id) < 0) {
>>
>> LM_ERR("unable to execute dialog\n");
>>
>> }
>>
>> }
>>
>> }
>>
>> }
>>
>> }
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
>>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
More information about the Users
mailing list