[Freeswitch-dev] Memory Leak Patch

Michael Jerris mike at jerris.com
Thu May 22 01:42:35 MSD 2014


thats strange, was this only when 100rel was turned on?  I'm sure we would have noticed this if it was happening.  I don't get totally what memory you are talking about, are you talking about the 100 trying we received?

On May 21, 2014, at 9:25 PM, Jerry Richards <jerry.richards at teotech.com> wrote:

> What we know for sure is, the memory allocated for "100 Trying" replies to outbound INVITE requests was simply not getting freed.  "original->orq_timeout" seemed a convenient variable to trigger freeing this memory since it goes to zero about 25-30 seconds after the call is disconnected.  Without this patch, we were losing about 3 kilobytes per outbound call.
> 
> -----Original Message-----
> From: freeswitch-dev-bounces at lists.freeswitch.org [mailto:freeswitch-dev-bounces at lists.freeswitch.org] On Behalf Of Michael Jerris
> Sent: Wednesday, May 21, 2014 1:59 PM
> To: freeswitch-dev at lists.freeswitch.org
> Subject: Re: [Freeswitch-dev] Memory Leak Patch
> 
> So correct me if I'm wrong, this looks like leak on timeout on provisional reply?  I don't think we have this one fixed...
> 
> On May 21, 2014, at 8:49 PM, Jerry Richards <jerry.richards at teotech.com> wrote:
> 
>> Here is the patch made to the latest (today's) Freeswitch stable branch (did you fix this leak in a differently somewhere else?):
>> 
>> *** C:\work\SipBugs\Phone\MemoryLeak\fs_stable\nta_ORIGINAL.c 
>> 2014-02-20 18:43:27.000000000 -0700
>> --- C:\work\SipBugs\Phone\MemoryLeak\fs_stable\nta_PATCHED.c 
>> 2014-05-21 12:14:39.000000000 -0700
>> ***************
>> *** 9166,9175 ****
>> --- 9166,9187 ----
>>   }
>> 
>>   return orq;
>> }
>> 
>> /** destroy msg if no timeout set on receive outgoing */
>> + int check_outgoing_recv_timeout(nta_outgoing_t *original, msg_t 
>> + *msg) {
>> + 	SU_DEBUG_5(("nta %s: orq_timeout=%d.\n","check_outgoing_recv_timeout",original->orq_timeout));
>> +     if(original->orq_timeout==0){          
>> +         outgoing_remove(original);
>> +         msg_destroy(msg);            
>> +         return 0;            
>> +     }
>> +     return original->orq_timeout;
>> + }
>> 
>> /** Process a response message. */
>> int outgoing_recv(nta_outgoing_t *_orq,
>> 		  int status,
>> 		  msg_t *msg,
>> 		  sip_t *sip)
>> ***************
>> *** 9232,9248 ****
>> --- 9244,9264 ----
>> 	original->orq_status = status;
>>       if (orq->orq_status < 200)
>> 	orq->orq_status = status;
>> 
>>       if (original->orq_queue == sa->sa_out.inv_calling) {
>> 		outgoing_queue(sa->sa_out.inv_proceeding, original);
>> + 		 if(check_outgoing_recv_timeout(original,msg)==0)
>> + 			return 0;
>>       }
>>       else if (original->orq_queue == sa->sa_out.inv_proceeding) {
>> 		if (sa->sa_out.inv_proceeding->q_timeout) {
>> 			outgoing_remove(original);
>> 			outgoing_queue(sa->sa_out.inv_proceeding, original);
>> + 			if(check_outgoing_recv_timeout(original,msg)==0)
>> + 				return 0;				
>> 		}
>>       }
>> 
>>       /* Handle 100rel */
>>       if (sip && sip->sip_rseq) {
>> 	if (outgoing_recv_reliable(orq, msg, sip) < 0) {
>> 
>> 
>> Here is the patch made to the latest (today's) Freeswitch master branch (did you fix this leak in a differently somewhere else?):
>> 
>> *** C:\work\SipBugs\Phone\MemoryLeak\fs_master\nta_ORIGINAL.c 
>> 2014-02-20 18:45:34.000000000 -0700
>> --- C:\work\SipBugs\Phone\MemoryLeak\fs_master\nta_PATCHED.c 
>> 2014-05-21 12:17:54.000000000 -0700
>> ***************
>> *** 9307,9316 ****
>> --- 9307,9328 ----
>>   }
>> 
>>   return orq;
>> }
>> 
>> /** destroy msg if no timeout set on receive outgoing */
>> + int check_outgoing_recv_timeout(nta_outgoing_t *original, msg_t 
>> + *msg) {
>> + 	SU_DEBUG_5(("nta %s: orq_timeout=%d.\n","check_outgoing_recv_timeout",original->orq_timeout));
>> +     if(original->orq_timeout==0){          
>> +         outgoing_remove(original);
>> +         msg_destroy(msg);            
>> +         return 0;            
>> +     }
>> +     return original->orq_timeout;
>> + }
>> 
>> /** Process a response message. */
>> int outgoing_recv(nta_outgoing_t *_orq,
>> 		  int status,
>> 		  msg_t *msg,
>> 		  sip_t *sip)
>> ***************
>> *** 9373,9389 ****
>> --- 9385,9405 ----
>> 	original->orq_status = status;
>>       if (orq->orq_status < 200)
>> 	orq->orq_status = status;
>> 
>>       if (original->orq_queue == sa->sa_out.inv_calling) {
>> 		outgoing_queue(sa->sa_out.inv_proceeding, original);
>> + 		 if(check_outgoing_recv_timeout(original,msg)==0)
>> + 			return 0;
>>       }
>>       else if (original->orq_queue == sa->sa_out.inv_proceeding) {
>> 		if (sa->sa_out.inv_proceeding->q_timeout) {
>> 			outgoing_remove(original);
>> 			outgoing_queue(sa->sa_out.inv_proceeding, original);
>> + 			if(check_outgoing_recv_timeout(original,msg)==0)
>> + 				return 0;				
>> 		}
>>       }
>> 
>>       /* Handle 100rel */
>>       if (sip && sip->sip_rseq) {
>> 	if (outgoing_recv_reliable(orq, msg, sip) < 0) {
>> 
>> I realized the mailing list does not accept attachments, so I put the patches in-line here.
>> 
>> Jerry
>> 
>> -----Original Message-----
>> From: freeswitch-dev-bounces at lists.freeswitch.org 
>> [mailto:freeswitch-dev-bounces at lists.freeswitch.org] On Behalf Of Ken 
>> Rice
>> Sent: Wednesday, May 21, 2014 1:37 PM
>> To: freeswitch-dev at lists.freeswitch.org
>> Subject: Re: [Freeswitch-dev] Memory Leak Patch
>> 
>> You should really check the lastest version... I believe those were patched ages ago...
>> 
>> 
>> On 5/21/14 3:29 PM, "Jerry Richards" <jerry.richards at teotech.com> wrote:
>> 
>>> We patched sofia-sip version 1.12.11 for memory leaks we found in sofia-sip.
>>> It's related to memory allocated for provisional replies to outbound 
>>> INVITE transactions which never get freed.  I suspect Freeswitch has 
>>> the same issue, so I created a patch file (attached) for each of the 
>>> latest (as of today) libs/sofia-sip/libsofia-sip-ua/nta/nta.c file in 
>>> both the stable and master Freeswitch branches.
>>> 
>>> Do you think you can use these patches in Freeswitch?  Or do you 
>>> think you already fixed these memory leaks in a different way?
>>> 
>>> Best Regards,
>>> Jerry
>>> _____________________________________________________________________
>>> _ ___ Professional FreeSWITCH Consulting Services:
>>> consulting at freeswitch.org
>>> http://www.freeswitchsolutions.com
>>> 
>>>  
>>> 
>>> 
>>> Official FreeSWITCH Sites
>>> http://www.freeswitch.org
>>> http://wiki.freeswitch.org
>>> http://www.cluecon.com
>>> 
>>> FreeSWITCH-dev mailing list
>>> FreeSWITCH-dev at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-de
>>> v
>>> http://www.freeswitch.org
>> 
>> --
>> Ken
>> http://www.FreeSWITCH.org
>> http://www.ClueCon.com
>> http://www.OSTAG.org
>> irc.freenode.net #freeswitch
>> Twitter: @FreeSWITCH
>> 
>> 
>> 
>> 
>> ______________________________________________________________________
>> ___ Professional FreeSWITCH Consulting Services:
>> consulting at freeswitch.org
>> http://www.freeswitchsolutions.com
>> 
>>  
>> 
>> 
>> Official FreeSWITCH Sites
>> http://www.freeswitch.org
>> http://wiki.freeswitch.org
>> http://www.cluecon.com
>> 
>> FreeSWITCH-dev mailing list
>> FreeSWITCH-dev at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
>> http://www.freeswitch.org
>> 
>> ______________________________________________________________________
>> ___ Professional FreeSWITCH Consulting Services:
>> consulting at freeswitch.org
>> http://www.freeswitchsolutions.com
>> 
>>  
>> 
>> 
>> Official FreeSWITCH Sites
>> http://www.freeswitch.org
>> http://wiki.freeswitch.org
>> http://www.cluecon.com
>> 
>> FreeSWITCH-dev mailing list
>> FreeSWITCH-dev at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
>> http://www.freeswitch.org
> 
> 
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
> 
>  
> 
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://wiki.freeswitch.org
> http://www.cluecon.com
> 
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
> 
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
> 
> 
> 
> 
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://wiki.freeswitch.org
> http://www.cluecon.com
> 
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org




Join us at ClueCon 2013 Aug 6-8, 2013
More information about the FreeSWITCH-dev mailing list