mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
source: don't leak sockets
This commit is contained in:
parent
48fdc1d37c
commit
6b93b17298
2 changed files with 7 additions and 4 deletions
|
|
@ -138,6 +138,7 @@ setup_pipeline (PinosGstSource *source, GError **error)
|
||||||
"sync", TRUE,
|
"sync", TRUE,
|
||||||
"enable-last-sample", FALSE,
|
"enable-last-sample", FALSE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (priv->pipeline), priv->sink);
|
gst_bin_add (GST_BIN (priv->pipeline), priv->sink);
|
||||||
gst_element_link (elem, priv->sink);
|
gst_element_link (elem, priv->sink);
|
||||||
|
|
||||||
|
|
@ -303,15 +304,16 @@ on_socket_notify (GObject *gobject,
|
||||||
g_object_get (gobject, "socket", &socket, NULL);
|
g_object_get (gobject, "socket", &socket, NULL);
|
||||||
|
|
||||||
if (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) {
|
if (prev_socket) {
|
||||||
g_signal_emit_by_name (priv->sink, "remove", prev_socket);
|
g_signal_emit_by_name (priv->sink, "remove", prev_socket);
|
||||||
|
g_object_unref (prev_socket);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pinos_source_report_busy (PINOS_SOURCE (source));
|
pinos_source_report_busy (PINOS_SOURCE (source));
|
||||||
g_signal_emit_by_name (priv->sink, "add", socket);
|
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);
|
g_object_get (priv->sink, "num-handles", &num_handles, NULL);
|
||||||
if (num_handles == 0) {
|
if (num_handles == 0) {
|
||||||
|
|
|
||||||
|
|
@ -252,14 +252,15 @@ on_socket_notify (GObject *gobject,
|
||||||
g_object_get (gobject, "socket", &socket, NULL);
|
g_object_get (gobject, "socket", &socket, NULL);
|
||||||
|
|
||||||
if (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) {
|
if (prev_socket) {
|
||||||
g_signal_emit_by_name (priv->sink, "remove", prev_socket);
|
g_signal_emit_by_name (priv->sink, "remove", prev_socket);
|
||||||
|
g_object_unref (prev_socket);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g_signal_emit_by_name (priv->sink, "add", socket);
|
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);
|
g_object_get (priv->sink, "num-handles", &num_handles, NULL);
|
||||||
if (num_handles > 0 && socket) {
|
if (num_handles > 0 && socket) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue