webrtc: Clean up pad block allocs on dispose.
Release references in pad blocks and release the memory in the
dispose function too, in case the state change doesn't get
run (because calling the parent state change fails).
diff --git a/ext/webrtc/transportsendbin.c b/ext/webrtc/transportsendbin.c
index daddd3b..3a9b5c6 100644
--- a/ext/webrtc/transportsendbin.c
+++ b/ext/webrtc/transportsendbin.c
@@ -68,6 +68,8 @@
PROP_RTCP_MUX,
};
+static void cleanup_blocks (TransportSendBin * send);
+
static void
_set_rtcp_mux (TransportSendBin * send, gboolean rtcp_mux)
{
@@ -265,27 +267,13 @@
case GST_STATE_CHANGE_READY_TO_NULL:{
GstElement *elem;
- if (send->rtp_block)
- _free_pad_block (send->rtp_block);
- send->rtp_block = NULL;
- if (send->rtcp_mux_block)
- _free_pad_block (send->rtcp_mux_block);
- send->rtcp_mux_block = NULL;
+ cleanup_blocks (send);
+
elem = send->stream->transport->dtlssrtpenc;
gst_element_set_locked_state (elem, FALSE);
-
- if (send->rtcp_block)
- _free_pad_block (send->rtcp_block);
- send->rtcp_block = NULL;
elem = send->stream->rtcp_transport->dtlssrtpenc;
gst_element_set_locked_state (elem, FALSE);
- if (send->rtp_nice_block)
- _free_pad_block (send->rtp_nice_block);
- send->rtp_nice_block = NULL;
- if (send->rtcp_nice_block)
- _free_pad_block (send->rtcp_nice_block);
- send->rtcp_nice_block = NULL;
break;
}
default:
@@ -423,6 +411,28 @@
}
static void
+cleanup_blocks (TransportSendBin * send)
+{
+ if (send->rtp_block)
+ _free_pad_block (send->rtp_block);
+ send->rtp_block = NULL;
+ if (send->rtcp_mux_block)
+ _free_pad_block (send->rtcp_mux_block);
+ send->rtcp_mux_block = NULL;
+
+ if (send->rtcp_block)
+ _free_pad_block (send->rtcp_block);
+ send->rtcp_block = NULL;
+
+ if (send->rtp_nice_block)
+ _free_pad_block (send->rtp_nice_block);
+ send->rtp_nice_block = NULL;
+ if (send->rtcp_nice_block)
+ _free_pad_block (send->rtcp_nice_block);
+ send->rtcp_nice_block = NULL;
+}
+
+static void
transport_send_bin_dispose (GObject * object)
{
TransportSendBin *send = TRANSPORT_SEND_BIN (object);
@@ -434,6 +444,7 @@
rtcp_transport->transport, send);
}
send->stream = NULL;
+ cleanup_blocks (send);
G_OBJECT_CLASS (parent_class)->dispose (object);
}