From 2aaf9a4ef19080bb091c0bd3fdaf866be0c62f44 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 26 Jun 2014 21:22:30 +0200 Subject: [PATCH] muxers: do not show EPIPE as an error --- src/muxer.h | 1 + src/muxer/muxer_pass.c | 10 ++++++---- src/muxer/muxer_tvh.c | 5 ++++- src/muxer/tvh/mkmux.c | 2 +- src/webui/webui.c | 3 ++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/muxer.h b/src/muxer.h index 1c0a85ae..223f5d34 100644 --- a/src/muxer.h +++ b/src/muxer.h @@ -81,6 +81,7 @@ typedef struct muxer { void *); int (*m_add_marker) (struct muxer *); // Add a marker (or chapter) + int m_eos; // End of stream int m_errors; // Number of errors muxer_container_type_t m_container; // The type of the container muxer_config_t m_config; // general configuration diff --git a/src/muxer/muxer_pass.c b/src/muxer/muxer_pass.c index 6a9fe168..68483d2a 100644 --- a/src/muxer/muxer_pass.c +++ b/src/muxer/muxer_pass.c @@ -401,10 +401,12 @@ pass_muxer_write(muxer_t *m, const void *data, size_t size) pm->m_errors++; } else if(tvh_write(pm->pm_fd, data, size)) { pm->pm_error = errno; - if (errno == EPIPE) /* this is an end-of-streaming notification */ - return; - tvhlog(LOG_ERR, "pass", "%s: Write failed -- %s", pm->pm_filename, - strerror(errno)); + if (errno != EPIPE) + tvhlog(LOG_ERR, "pass", "%s: Write failed -- %s", pm->pm_filename, + strerror(errno)); + else + /* this is an end-of-streaming notification */ + m->m_eos = 1; m->m_errors++; muxer_cache_update(m, pm->pm_fd, pm->pm_off, 0); pm->pm_off = lseek(pm->pm_fd, 0, SEEK_CUR); diff --git a/src/muxer/muxer_tvh.c b/src/muxer/muxer_tvh.c index 715328ce..4c38bb0d 100644 --- a/src/muxer/muxer_tvh.c +++ b/src/muxer/muxer_tvh.c @@ -155,10 +155,13 @@ tvh_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data) { th_pkt_t *pkt = (th_pkt_t*)data; tvh_muxer_t *tm = (tvh_muxer_t*)m; + int r; assert(smt == SMT_PACKET); - if(mk_mux_write_pkt(tm->tm_ref, pkt)) { + if((r = mk_mux_write_pkt(tm->tm_ref, pkt)) != 0) { + if (r == EPIPE) + tm->m_eos = 1; tm->m_errors++; return -1; } diff --git a/src/muxer/tvh/mkmux.c b/src/muxer/tvh/mkmux.c index 5f366717..134021b1 100644 --- a/src/muxer/tvh/mkmux.c +++ b/src/muxer/tvh/mkmux.c @@ -462,7 +462,7 @@ mk_write_to_fd(mk_mux_t *mkm, htsbuf_queue_t *hq) static void mk_write_queue(mk_mux_t *mkm, htsbuf_queue_t *q) { - if(!mkm->error && mk_write_to_fd(mkm, q)) + if(!mkm->error && mk_write_to_fd(mkm, q) && mkm->error != EPIPE) tvhlog(LOG_ERR, "mkv", "%s: Write failed -- %s", mkm->filename, strerror(errno)); diff --git a/src/webui/webui.c b/src/webui/webui.c index d1123db4..d02a1b45 100644 --- a/src/webui/webui.c +++ b/src/webui/webui.c @@ -339,7 +339,8 @@ http_stream_run(http_connection_t *hc, streaming_queue_t *sq, streaming_msg_free(sm); if(mux->m_errors) { - tvhlog(LOG_WARNING, "webui", "Stop streaming %s, muxer reported errors", hc->hc_url_orig); + if (!mux->m_eos) + tvhlog(LOG_WARNING, "webui", "Stop streaming %s, muxer reported errors", hc->hc_url_orig); run = 0; } }