summaryrefslogtreecommitdiffstats
path: root/stream/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'stream/cache.c')
-rw-r--r--stream/cache.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/stream/cache.c b/stream/cache.c
index e622ae9af8..0fd9585eaa 100644
--- a/stream/cache.c
+++ b/stream/cache.c
@@ -33,6 +33,9 @@
// the cache is active.
#define CACHE_UPDATE_CONTROLS_TIME 2.0
+// Time in seconds the cache prints a new message at all.
+#define CACHE_NO_SPAM 5.0
+
#include <stdio.h>
#include <stdlib.h>
@@ -77,6 +80,7 @@ struct priv {
// Owned by the main thread
stream_t *cache; // wrapper stream, used by demuxer etc.
+ double last_warn_time;
// Owned by the cache thread
stream_t *stream; // "real" stream, used to read from the source media
@@ -142,15 +146,19 @@ static int cache_wakeup_and_wait(struct priv *s, double *retry_time)
if (stream_check_interrupt(0))
return CACHE_INTERRUPTED;
- // Print a "more severe" warning after waiting 1 second and no new data
- if ((*retry_time) >= 1.0) {
- MP_ERR(s, "Cache keeps not responding.\n");
- } else if (*retry_time > 0.1) {
- MP_WARN(s, "Cache is not responding - slow/stuck network connection?\n");
- }
-
double start = mp_time_sec();
+ if (!s->last_warn_time || start - s->last_warn_time >= CACHE_NO_SPAM) {
+ // Print a "more severe" warning after waiting 1 second and no new data
+ if ((*retry_time) >= 1.0) {
+ MP_ERR(s, "Cache keeps not responding.\n");
+ s->last_warn_time = start;
+ } else if (*retry_time > 0.1) {
+ MP_WARN(s, "Cache is not responding - slow/stuck network connection?\n");
+ s->last_warn_time = start;
+ }
+ }
+
pthread_cond_signal(&s->wakeup);
mpthread_cond_timed_wait(&s->wakeup, &s->mutex, CACHE_WAIT_TIME);
@@ -261,6 +269,7 @@ static bool cache_fill(struct priv *s)
// The read call might take a long time and block, so drop the lock.
pthread_mutex_unlock(&s->mutex);
len = stream_read_partial(s->stream, &s->buffer[pos], space);
+ mp_sleep_us(100000);
pthread_mutex_lock(&s->mutex);
double pts;