[asterisk-commits] russell: branch 1.4 r115297 - /branches/1.4/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon May 5 12:53:54 CDT 2008


Author: russell
Date: Mon May  5 12:53:54 2008
New Revision: 115297

URL: http://svn.digium.com/view/asterisk?view=rev&rev=115297
Log:
Blocked revisions 115296 via svnmerge

........
r115296 | russell | 2008-05-05 12:53:26 -0500 (Mon, 05 May 2008) | 28 lines

Merge changes from team/russell/iax2_find_callno_1.2

These changes address a critical performance issue introduced in the latest
release.  The fix for the latest security issue included a change that made
Asterisk randomly choose call numbers to make them more difficult to guess by
attackers.  However, due to some inefficient (this is by far, an understatement)
code, when Asterisk chose high call numbers, chan_iax2 became unusable after
just a small number of calls.  On a small embedded platform, it would not be
able to handle a single call.  On my Intel Core 2 Duo @ 2.33 GHz, I couldn't
run more than about 16 IAX2 channels.  Ouch.

These changes address some performance issues of the find_callno() function
that have bothered me for a very long time.  On every incoming media frame,
it iterated through every possible call number trying to find a matching
active call.  This involved a mutex lock and unlock for each call number
checked.  So, if the random call number chosen was 20000, then every media
frame would cause 20000 locks and unlocks.  Previously, this problem was
not as obvious since Asterisk always chose the lowest call number it could.

A second container for IAX2 pvt structs has been added.  It is an astobj2
hash table.  When we know the remote side's call number, the pvt goes into
the hash table with a hash value of the remote side's call number.  Then,
lookups for incoming media frames are a very fast hash lookup instead of an
absolutely insane array traversal.

In a quick test, I was able to get more than 3600% more IAX2 channels
on my machine with these changes.

........

Modified:
    branches/1.4/   (props changed)

Propchange: branches/1.4/
------------------------------------------------------------------------------
Binary property 'branch-1.2-blocked' - no diff available.




More information about the asterisk-commits mailing list