dtlsdec: Avoid duplicate ref when passing certificate property
authorJuan Navarro <juan.navarro@gmx.es>
Tue, 25 Jun 2019 18:37:38 +0000 (20:37 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 9 Aug 2019 18:14:43 +0000 (19:14 +0100)
The agent itself will take a ref on the property setter, so we'll be
left with two references to the certificate object, when actually there
should be only one

ext/dtls/gstdtlsdec.c

index 87b8221..e41914e 100644 (file)
@@ -587,9 +587,12 @@ get_agent_by_pem (const gchar * pem)
   if (!pem) {
     if (g_once_init_enter (&generated_cert_agent)) {
       GstDtlsAgent *new_agent;
+      GObject *certificate;
 
+      certificate = g_object_new (GST_TYPE_DTLS_CERTIFICATE, NULL);
       new_agent = g_object_new (GST_TYPE_DTLS_AGENT, "certificate",
-          g_object_new (GST_TYPE_DTLS_CERTIFICATE, NULL), NULL);
+          certificate, NULL);
+      g_object_unref (certificate);
 
       GST_DEBUG_OBJECT (generated_cert_agent,
           "no agent with generated cert found, creating new");
@@ -612,9 +615,12 @@ get_agent_by_pem (const gchar * pem)
     agent = GST_DTLS_AGENT (g_hash_table_lookup (agent_table, pem));
 
     if (!agent) {
-      agent = g_object_new (GST_TYPE_DTLS_AGENT,
-          "certificate", g_object_new (GST_TYPE_DTLS_CERTIFICATE, "pem", pem,
-              NULL), NULL);
+      GObject *certificate;
+
+      certificate = g_object_new (GST_TYPE_DTLS_CERTIFICATE, "pem", pem, NULL);
+      agent = g_object_new (GST_TYPE_DTLS_AGENT, "certificate", certificate,
+          NULL);
+      g_object_unref (certificate);
 
       g_object_weak_ref (G_OBJECT (agent), (GWeakNotify) agent_weak_ref_notify,
           (gpointer) g_strdup (pem));