summaryrefslogtreecommitdiff
path: root/gst/tcp/gstmultihandlesink.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/tcp/gstmultihandlesink.c')
-rw-r--r--gst/tcp/gstmultihandlesink.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/gst/tcp/gstmultihandlesink.c b/gst/tcp/gstmultihandlesink.c
index 901326159..876cc32d3 100644
--- a/gst/tcp/gstmultihandlesink.c
+++ b/gst/tcp/gstmultihandlesink.c
@@ -1704,26 +1704,14 @@ gst_multi_handle_sink_queue_buffer (GstMultiHandleSink * mhsink,
soft_max_buffers);
/* then loop over the clients and update the positions */
- max_buffer_usage = 0;
-
-restart:
cookie = mhsink->clients_cookie;
- for (clients = mhsink->clients; clients; clients = next) {
+ for (clients = mhsink->clients; clients; clients = clients->next) {
GstMultiHandleClient *mhclient = clients->data;
- g_get_current_time (&nowtv);
- now = GST_TIMEVAL_TO_TIME (nowtv);
-
- if (cookie != mhsink->clients_cookie) {
- GST_DEBUG_OBJECT (sink, "Clients cookie outdated, restarting");
- goto restart;
- }
-
- next = g_list_next (clients);
-
mhclient->bufpos++;
GST_LOG_OBJECT (sink, "%s client %p at position %d",
mhclient->debug, mhclient, mhclient->bufpos);
+
/* check soft max if needed, recover client */
if (soft_max_buffers > 0 && mhclient->bufpos >= soft_max_buffers) {
gint newpos;
@@ -1740,6 +1728,25 @@ restart:
"%s client %p not recovering position", mhclient->debug, mhclient);
}
}
+ }
+
+ max_buffer_usage = 0;
+ g_get_current_time (&nowtv);
+ now = GST_TIMEVAL_TO_TIME (nowtv);
+
+ /* now check for new or slow clients */
+restart:
+ cookie = mhsink->clients_cookie;
+ for (clients = mhsink->clients; clients; clients = next) {
+ GstMultiHandleClient *mhclient = clients->data;
+
+ if (cookie != mhsink->clients_cookie) {
+ GST_DEBUG_OBJECT (sink, "Clients cookie outdated, restarting");
+ goto restart;
+ }
+
+ next = g_list_next (clients);
+
/* check hard max and timeout, remove client */
if ((max_buffers > 0 && mhclient->bufpos >= max_buffers) ||
(mhsink->timeout > 0
@@ -1761,6 +1768,7 @@ restart:
mhsinkclass->hash_adding (mhsink, mhclient);
hash_changed = TRUE;
}
+
/* keep track of maximum buffer usage */
if (mhclient->bufpos > max_buffer_usage) {
max_buffer_usage = mhclient->bufpos;