diff --git a/gst/tcp/gstmultifdsink.c b/gst/tcp/gstmultifdsink.c index 1f4dd15c2a..5257d4e3d4 100644 --- a/gst/tcp/gstmultifdsink.c +++ b/gst/tcp/gstmultifdsink.c @@ -855,6 +855,8 @@ restart: next = g_list_next (clients); mhclient->status = GST_CLIENT_STATUS_REMOVED; + /* the next call changes the list, which is why we iterate + * with a temporary next pointer */ gst_multi_fd_sink_remove_client_link (sink, clients); } gst_poll_restart (sink->fdset); diff --git a/gst/tcp/gstmultisocketsink.c b/gst/tcp/gstmultisocketsink.c index b01575db7c..44f62c61b0 100644 --- a/gst/tcp/gstmultisocketsink.c +++ b/gst/tcp/gstmultisocketsink.c @@ -782,7 +782,7 @@ done: void gst_multi_socket_sink_clear (GstMultiHandleSink * mhsink) { - GList *clients; + GList *clients, *next; guint32 cookie; GstMultiSocketSink *sink = GST_MULTI_SOCKET_SINK (mhsink); @@ -791,7 +791,7 @@ gst_multi_socket_sink_clear (GstMultiHandleSink * mhsink) CLIENTS_LOCK (sink); restart: cookie = sink->clients_cookie; - for (clients = sink->clients; clients; clients = clients->next) { + for (clients = sink->clients; clients; clients = next) { GstMultiHandleClient *mhclient; if (cookie != sink->clients_cookie) { @@ -800,7 +800,11 @@ restart: } mhclient = (GstMultiHandleClient *) clients->data; + next = g_list_next (clients); + mhclient->status = GST_CLIENT_STATUS_REMOVED; + /* the next call changes the list, which is why we iterate + * with a temporary next pointer */ gst_multi_socket_sink_remove_client_link (sink, clients); } diff --git a/tests/check/elements/multisocketsink.c b/tests/check/elements/multisocketsink.c index 4bd2da9004..719fedcdf3 100644 --- a/tests/check/elements/multisocketsink.c +++ b/tests/check/elements/multisocketsink.c @@ -587,9 +587,7 @@ GST_START_TEST (test_burst_client_bytes) ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); cleanup_multisocketsink (sink); - // FIXME for slomo: the refcount is now 3 instead of 1 ? - // ASSERT_CAPS_REFCOUNT (caps, "caps", 1); - ASSERT_CAPS_REFCOUNT (caps, "caps", 3); + ASSERT_CAPS_REFCOUNT (caps, "caps", 1); gst_caps_unref (caps); } @@ -690,9 +688,7 @@ GST_START_TEST (test_burst_client_bytes_keyframe) ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); cleanup_multisocketsink (sink); - // FIXME for slomo: the refcount is now 3 instead of 1 ? - // ASSERT_CAPS_REFCOUNT (caps, "caps", 1); - ASSERT_CAPS_REFCOUNT (caps, "caps", 3); + ASSERT_CAPS_REFCOUNT (caps, "caps", 1); gst_caps_unref (caps); } @@ -798,9 +794,7 @@ GST_START_TEST (test_burst_client_bytes_with_keyframe) ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS); cleanup_multisocketsink (sink); - // FIXME for slomo: the refcount is now 3 instead of 1 ? - // ASSERT_CAPS_REFCOUNT (caps, "caps", 1); - ASSERT_CAPS_REFCOUNT (caps, "caps", 3); + ASSERT_CAPS_REFCOUNT (caps, "caps", 1); gst_caps_unref (caps); }