[svn-commits] mattf: tag 1.4.10.1 r928 - /tags/1.4.10.1/q921.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jun 30 10:37:30 CDT 2009


Author: mattf
Date: Tue Jun 30 10:37:25 2009
New Revision: 928

URL: http://svn.asterisk.org/svn-view/libpri?view=rev&rev=928
Log:
------------------------------------------------------------------------
r859 | mattf | 2009-06-09 14:47:05 -0500 (Tue, 09 Jun 2009) | 19 lines

There are two changes in this commit that are bug fixes for various Q.921 issues found in internal testing.

Both were exposed/introduced by the TBR4 compliance patch for bug #12861, in changing how retransmissions and in how
the transmission queue was maintained.  TX-RX message flow and acknowledgement was severely restricted,
since the patch changed the behavior so that pending untransmitted frames would not actually be send until
the next RR was received in normal circumstances, or REJ when a reject frame was received.  On busy links,
this can severly limit the amount of useful traffic that is sent, and can slow down message transmission.

Until someone can point out where in Q.921 it is mandated for us to wait for RR frames to start sending
untransmitted messages, the first change is to allow us to send untransmitted frames when we receive new
I frames as well, with updated N(R).

The other bug fixed is a situation caused by the restricted traffic flow, if an outside process tries to send
an I-frame asynchronous to an RR frame, when the transmit window was previously closed and then opened up but 
an RR has not been received yet.  A bug was found with the integration of the old transmit code with the new reject 
handling code which caused the new frame to be sent immediately, regardless if there were any pending untransmitted 
I-frames in the queue to be sent and causing an out of order I-frame to be sent to the other side.  This bug is 
also fixed in this patch.

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

Modified:
    tags/1.4.10.1/q921.c

Modified: tags/1.4.10.1/q921.c
URL: http://svn.asterisk.org/svn-view/libpri/tags/1.4.10.1/q921.c?view=diff&rev=928&r1=927&r2=928
==============================================================================
--- tags/1.4.10.1/q921.c (original)
+++ tags/1.4.10.1/q921.c Tue Jun 30 10:37:25 2009
@@ -523,9 +523,7 @@
 		   size is too big */
 		if ((pri->q921_state == Q921_LINK_CONNECTION_ESTABLISHED) && (!pri->retrans && !pri->busy)) {
 			if (pri->windowlen < pri->window) {
-				pri->windowlen++;
-				q921_transmit(pri, (q921_h *)(&f->h), f->len);
-				f->transmitted++;
+				q921_send_queued_iframes(pri);
 			} else {
 				if (pri->debug & PRI_DEBUG_Q921_DUMP)
 					pri_message(pri, "Delaying transmission of %d, window is %d/%d long\n", 
@@ -583,7 +581,7 @@
 		Q921_INC(pri->v_r);
 		/* Handle their ACK */
 		pri->sentrej = 0;
-		ev = q921_ack_rx(pri, i->n_r, 0);
+		ev = q921_ack_rx(pri, i->n_r, 1);
 		if (ev)
 			return ev;
 		if (i->p_f) {




More information about the svn-commits mailing list