mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	res_rtp_asterisk: Resolve loop when receive buffer is flushed
When the receive buffer was flushed by a received packet while it already contained a packet with the same sequence number, Asterisk never left the while loop which tried to order the packets. This change makes it so if the packet is in the receive buffer it is retrieved and freed allowing the buffer to empty. ASTERISK-28827 Change-Id: Idaa376101bc1ac880047c49feb6faee773e718b3
This commit is contained in:
		
				
					committed by
					
						 Joshua Colp
						Joshua Colp
					
				
			
			
				
	
			
			
			
						parent
						
							a107e85b2e
						
					
				
				
					commit
					d50fd0acc0
				
			| @@ -7835,6 +7835,14 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc | ||||
| 					ast_debug(2, "Inserted just received packet with sequence number '%d' in correct order on RTP instance '%p'\n", | ||||
| 						seqno, instance); | ||||
| 				} | ||||
| 				/* It is possible due to packet retransmission for this packet to also exist in the receive | ||||
| 				 * buffer so we explicitly remove it in case this occurs, otherwise the receive buffer will | ||||
| 				 * never be empty. | ||||
| 				 */ | ||||
| 				payload = (struct ast_rtp_rtcp_nack_payload *)ast_data_buffer_remove(rtp->recv_buffer, seqno); | ||||
| 				if (payload) { | ||||
| 					ast_free(payload); | ||||
| 				} | ||||
| 				rtp->expectedrxseqno++; | ||||
| 				if (rtp->expectedrxseqno == SEQNO_CYCLE_OVER) { | ||||
| 					rtp->expectedrxseqno = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user