[Freeswitch-dev] Memory Leak Patch

Jerry Richards jerry.richards at teotech.com
Thu May 22 00:49:49 MSD 2014


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-dev
> 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



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