]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-11750: JB fix: avoid infinite loop when chan var rtp_nack_buffer_size is small...
authorDragos Oancea <dragos@signalwire.com>
Wed, 3 Apr 2019 13:56:59 +0000 (13:56 +0000)
committerAndrey Volk <andywolk@gmail.com>
Thu, 18 Jul 2019 22:06:26 +0000 (02:06 +0400)
src/switch_jitterbuffer.c

index 7ba582028dc396469cf227665c65ceb76364124e..f27b5ee8e1ed0083e3c07d7bc7c2051d8d8fe71d 100644 (file)
@@ -1256,11 +1256,14 @@ SWITCH_DECLARE(switch_status_t) switch_jb_put_packet(switch_jb_t *jb, switch_rtp
 
        add_node(jb, packet, len);
 
-       if (switch_test_flag(jb, SJB_QUEUE_ONLY) && jb->max_packet_len 
-                       && jb->allocated_nodes > jb->max_frame_len * 2 - 1) {
+       if (switch_test_flag(jb, SJB_QUEUE_ONLY) && jb->max_packet_len && jb->max_frame_len * 2 > jb->max_packet_len &&
+                       jb->allocated_nodes > jb->max_frame_len * 2 - 1) {
                while ((jb->max_frame_len * 2 - jb->visible_nodes) < jb->max_packet_len) {
                        drop_oldest_frame(jb);
                }
+       } else if (switch_test_flag(jb, SJB_QUEUE_ONLY) && jb->max_packet_len && jb->max_frame_len * 2 < jb->max_packet_len) {
+               /* rtp_nack_buffer_size less than initial max_packet_len */
+               drop_oldest_frame(jb);
        }
 
        switch_mutex_unlock(jb->mutex);