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);
void
gst_multi_socket_sink_clear (GstMultiHandleSink * mhsink)
{
- GList *clients;
+ GList *clients, *next;
guint32 cookie;
GstMultiSocketSink *sink = GST_MULTI_SOCKET_SINK (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) {
}
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);
}
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);
}
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);
}
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);
}