rtpbin: only reconsider once for BYE
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 27 Jul 2009 10:43:02 +0000 (12:43 +0200)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 11 Aug 2009 01:30:47 +0000 (02:30 +0100)
When iterating the sources of a BYE packet, don't signal a reconsideration for
each of them but signal after we handled all sources.

gst/rtpmanager/rtpsession.c

index d63d9d0..fe38c36 100644 (file)
@@ -1711,6 +1711,7 @@ rtp_session_process_bye (RTPSession * sess, GstRTCPPacket * packet,
 {
   guint count, i;
   gchar *reason;
+  gboolean reconsider = FALSE;
 
   reason = gst_rtcp_packet_bye_get_reason (packet);
   GST_DEBUG ("got BYE packet (reason: %s)", GST_STR_NULL (reason));
@@ -1769,11 +1770,9 @@ rtp_session_process_bye (RTPSession * sess, GstRTCPPacket * packet,
 
         sess->next_rtcp_check_time += arrival->time;
 
-        RTP_SESSION_UNLOCK (sess);
-        /* notify app of reconsideration */
-        if (sess->callbacks.reconsider)
-          sess->callbacks.reconsider (sess, sess->reconsider_user_data);
-        RTP_SESSION_LOCK (sess);
+        /* mark pending reconsider. We only want to signal the reconsideration
+         * once after we handled all the source in the bye packet */
+        reconsider = TRUE;
       }
     }
 
@@ -1784,6 +1783,13 @@ rtp_session_process_bye (RTPSession * sess, GstRTCPPacket * packet,
 
     g_object_unref (source);
   }
+  if (reconsider) {
+    RTP_SESSION_UNLOCK (sess);
+    /* notify app of reconsideration */
+    if (sess->callbacks.reconsider)
+      sess->callbacks.reconsider (sess, sess->reconsider_user_data);
+    RTP_SESSION_LOCK (sess);
+  }
   g_free (reason);
 }