Review Board 1.7.16

IAX2 defer_full_frames fail to get sent

Review Request #2426 - Created April 3, 2013 and submitted

Alec Davis
1.8 to trunk
On a slower machine when a full_frame with the same callno is already being processed by another thread the frame is queued onto the other thread.
However, nothing indicates to the other thread that it now has a frame to process.

On the bug report, I have debug messages in the patch.
In theory, the thread that is already processing the callno should pickup the deferred frames, but it doesn't.

What was also revealed in ASTERISK-18827 using iax_18827.diff2.txt, is that the deferred frames queue increases each time a POKE/PONG is initiated.
At some stage this will exhaust memory.
Refer to the line below
+		ast_log(LOG_WARNING, "ALEC[%d] unhandled frame on thread [%d]\n", from_here->threadnum, to_here->threadnum);
Before patch:

astrid-test*CLI> iax2 show threads
IAX2 Thread Information
Idle Threads:
Thread 2: state=0, update=5, actions=4, func=''
Thread 3: state=0, update=4, actions=2, func=''
Thread 4: state=0, update=10, actions=2, func=''
Thread 5: state=0, update=3, actions=4, func=''
Thread 6: state=0, update=8, actions=2, func=''
Thread 7: state=0, update=2, actions=3, func=''
Thread 8: state=0, update=1, actions=3, func=''
Thread 9: state=0, update=0, actions=3, func=''
Thread 10: state=0, update=6, actions=1, func=''
Active Threads:
Thread P1: state=1, update=1365045454, actions=0, func='socket_process'
Dynamic Threads:
10 of 10 threads accounted for with 0 dynamic threads

and iax2 show peers reports link is UNREACHABLE

After patch:
iax2 show threads has all idle.

iax2 show peers (immediately after 'module load')
Name/Username    Host                 Mask             Port          Status      Description
astrid2/astrid2 (S)  4569 (T)      OK (1002 ms)
1 iax2 peers [1 online, 0 offline, 0 unmonitored]

Review request changed
Updated (April 20, 2013, 11:12 a.m.)
  • changed from pending to submitted
Committed in revision 386185 runs on a server provided by Digium, Inc. and uses bandwidth donated to the open source Asterisk community by API Digital Communications in Huntsville, AL USA.
Please report problems with this site to