From af59f573b572f67b30c7f3f14c821cbfca514719 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 13 Mar 2012 19:26:47 +0100 Subject: [PATCH] rtpsession: don't leak the address --- gst/rtpmanager/rtpsession.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 9537840..b994d94 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -1674,6 +1674,13 @@ update_arrival_stats (RTPSession * sess, RTPArrivalStats * arrival, } } +static void +clean_arrival_stats (RTPArrivalStats * arrival) +{ + if (arrival->address) + g_object_unref (arrival->address); +} + /** * rtp_session_process_rtp: * @sess: and #RTPSession @@ -1790,6 +1797,8 @@ rtp_session_process_rtp (RTPSession * sess, GstBuffer * buffer, RTP_SESSION_UNLOCK (sess); + clean_arrival_stats (&arrival); + return result; /* ERRORS */ @@ -1801,15 +1810,17 @@ invalid_packet: } ignore: { - gst_buffer_unref (buffer); RTP_SESSION_UNLOCK (sess); + gst_buffer_unref (buffer); + clean_arrival_stats (&arrival); GST_DEBUG ("ignoring RTP packet because we are leaving"); return GST_FLOW_OK; } collision: { - gst_buffer_unref (buffer); RTP_SESSION_UNLOCK (sess); + gst_buffer_unref (buffer); + clean_arrival_stats (&arrival); GST_DEBUG ("ignoring packet because its collisioning"); return GST_FLOW_OK; } @@ -2391,8 +2402,7 @@ rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer, sess->stats.avg_rtcp_packet_size, arrival.bytes); RTP_SESSION_UNLOCK (sess); - if (arrival.address) - g_object_unref (arrival.address); + clean_arrival_stats (&arrival); /* notify caller of sr packets in the callback */ if (do_sync && sess->callbacks.sync_rtcp) { @@ -2415,9 +2425,10 @@ invalid_packet: } ignore: { - gst_buffer_unref (buffer); RTP_SESSION_UNLOCK (sess); - GST_DEBUG ("ignoring RTP packet because we left"); + gst_buffer_unref (buffer); + clean_arrival_stats (&arrival); + GST_DEBUG ("ignoring RTCP packet because we left"); return GST_FLOW_OK; } } -- 2.7.4