[Freeswitch-dev] Memory Leak Patch

Jerry Richards jerry.richards at teotech.com
Thu May 22 01:25:36 MSD 2014


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



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