summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-03-21 14:48:01 +0100
committerwm4 <wm4@nowhere>2018-03-26 19:47:07 +0200
commit7d10728aaadd171bc5e25545dae1c7dedd5145f7 (patch)
treef14a58530756c5222daeaee491630188d5daf7c4
parent965ba23303d980c239e2b0191488766cfa7b0f75 (diff)
downloadmpv-7d10728aaadd171bc5e25545dae1c7dedd5145f7.tar.bz2
mpv-7d10728aaadd171bc5e25545dae1c7dedd5145f7.tar.xz
demux, stream: ignore packets and errors on forced exit
When this happens, network calls are forcibly aborted (more or less), but demuxers might keep going, as most of them do not check for forced exits properly. This can possibly lead to broken packets being added. Also do not attempt to read more packets in this situation. Also do not print a stream open failed message if opening was aborted anyway.
-rw-r--r--demux/demux.c4
-rw-r--r--stream/stream.c3
2 files changed, 4 insertions, 3 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 4d70938938..4563a034a2 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1183,7 +1183,7 @@ static void adjust_seek_range_on_packet(struct demux_stream *ds,
void demux_add_packet(struct sh_stream *stream, demux_packet_t *dp)
{
struct demux_stream *ds = stream ? stream->ds : NULL;
- if (!dp || !dp->len || !ds) {
+ if (!dp || !dp->len || !ds || demux_cancel_test(ds->in->d_thread)) {
talloc_free(dp);
return;
}
@@ -1306,7 +1306,7 @@ static bool read_packet(struct demux_internal *in)
in->eof = false;
in->idle = true;
- if (!in->reading || in->blocked)
+ if (!in->reading || in->blocked || demux_cancel_test(in->d_thread))
return false;
// Check if we need to read a new packet. We do this if all queues are below
diff --git a/stream/stream.c b/stream/stream.c
index 255e583de2..4f63236d6a 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -302,7 +302,8 @@ struct stream *stream_create(const char *url, int flags,
continue;
}
if (r != STREAM_OK) {
- mp_err(log, "Failed to open %s.\n", url);
+ if (!mp_cancel_test(c))
+ mp_err(log, "Failed to open %s.\n", url);
goto done;
}
}