diff --git a/src/modules/gst/gst-source.c b/src/modules/gst/gst-source.c index 1dd55d196..e40def81c 100644 --- a/src/modules/gst/gst-source.c +++ b/src/modules/gst/gst-source.c @@ -138,6 +138,7 @@ setup_pipeline (PinosGstSource *source, GError **error) "sync", TRUE, "enable-last-sample", FALSE, NULL); + gst_bin_add (GST_BIN (priv->pipeline), priv->sink); gst_element_link (elem, priv->sink); @@ -303,15 +304,16 @@ on_socket_notify (GObject *gobject, g_object_get (gobject, "socket", &socket, NULL); if (socket == NULL) { - GSocket *prev_socket = g_object_get_data (gobject, "last-socket"); + GSocket *prev_socket = g_object_steal_data (gobject, "last-socket"); if (prev_socket) { g_signal_emit_by_name (priv->sink, "remove", prev_socket); + g_object_unref (prev_socket); } } else { pinos_source_report_busy (PINOS_SOURCE (source)); g_signal_emit_by_name (priv->sink, "add", socket); + g_object_set_data_full (gobject, "last-socket", socket, g_object_unref); } - g_object_set_data (gobject, "last-socket", socket); g_object_get (priv->sink, "num-handles", &num_handles, NULL); if (num_handles == 0) { diff --git a/src/server/client-source.c b/src/server/client-source.c index d6d21b255..c543031b0 100644 --- a/src/server/client-source.c +++ b/src/server/client-source.c @@ -252,14 +252,15 @@ on_socket_notify (GObject *gobject, g_object_get (gobject, "socket", &socket, NULL); if (socket == NULL) { - GSocket *prev_socket = g_object_get_data (gobject, "last-socket"); + GSocket *prev_socket = g_object_steal_data (gobject, "last-socket"); if (prev_socket) { g_signal_emit_by_name (priv->sink, "remove", prev_socket); + g_object_unref (prev_socket); } } else { g_signal_emit_by_name (priv->sink, "add", socket); + g_object_set_data_full (gobject, "last-socket", socket, g_object_unref); } - g_object_set_data (gobject, "last-socket", socket); g_object_get (priv->sink, "num-handles", &num_handles, NULL); if (num_handles > 0 && socket) {