[Home]

Summary:ASTERISK-11347: G729 decoders not freed after IAX2 call
Reporter:P. Christeas (xrg)Labels:
Date Opened:2008-01-31 14:13:02.000-0600Date Closed:2008-01-31 17:12:11.000-0600
Priority:MajorRegression?No
Status:Closed/CompleteComponents:Channels/chan_iax2
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:( 0) 11892.diff
Description:Early report.

I have verified that in an SIP -> IAX2 call where the SIP leg has g729 and the IAX2 ilbc + jitterbuffer, the g729 *decoder* is not freed!
As a result, after 2 calls I can see:
> show g729
0/2 encoders/decoders of 20 licensed channels are currently in use

.. while system is idle.

I guess this has to do with recent changes in 1.4.18, since there was nothing similar in 1.4.17.
Comments:By: P. Christeas (xrg) 2008-01-31 14:50:49.000-0600

Must be related to ASTERISK-11169, it seems there is a path that will cause destroy(ast_trans_pvt *) from main/translate.c:139 not to be called after the flag, thus not freeing the codec.

By: Russell Bryant (russell) 2008-01-31 16:38:41.000-0600

Please give this patch a try.

By: P. Christeas (xrg) 2008-01-31 16:57:41.000-0600

How can I increase your karma??

It worked! Of course, I will be testing it more for the next hours..

By: Russell Bryant (russell) 2008-01-31 17:03:07.000-0600

Ha!  I never get karma for the patches I write these days.  That's ok, though, it's my job.  :)

I'm glad it worked.  I'm going to go ahead and commit it.  Please let me know if you find any additional problems.

Thanks!

By: Digium Subversion (svnbot) 2008-01-31 17:07:42.000-0600

Repository: asterisk
Revision: 101601

U   branches/1.4/main/file.c
U   branches/1.4/main/translate.c

------------------------------------------------------------------------
r101601 | russell | 2008-01-31 17:07:41 -0600 (Thu, 31 Jan 2008) | 12 lines

Fix a couple of places where ast_frfree() was not called on a frame that came
from a translator.  This showed itself by g729 decoders not getting released.
Since the flag inside the translator frame never got unset by freeing the frame
to indicate it was no longer in use, the translators never got destroyed, and
thus the g729 licenses were not released.

(closes issue ASTERISK-11347)
Reported by: xrg
Patches:
     11892.diff uploaded by russell (license 2)
Tested by: xrg, russell

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=101601

By: Digium Subversion (svnbot) 2008-01-31 17:12:11.000-0600

Repository: asterisk
Revision: 101611

_U  trunk/
U   trunk/main/file.c
U   trunk/main/translate.c

------------------------------------------------------------------------
r101611 | russell | 2008-01-31 17:12:11 -0600 (Thu, 31 Jan 2008) | 20 lines

Merged revisions 101601 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r101601 | russell | 2008-01-31 17:10:06 -0600 (Thu, 31 Jan 2008) | 12 lines

Fix a couple of places where ast_frfree() was not called on a frame that came
from a translator.  This showed itself by g729 decoders not getting released.
Since the flag inside the translator frame never got unset by freeing the frame
to indicate it was no longer in use, the translators never got destroyed, and
thus the g729 licenses were not released.

(closes issue ASTERISK-11347)
Reported by: xrg
Patches:
     11892.diff uploaded by russell (license 2)
Tested by: xrg, russell

........

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=101611