From 6958e67784fd405ba732e0a99c5a19eea21e0077 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sat, 5 Jul 2014 11:40:41 +0200 Subject: [PATCH] muxers: handle ECONNRESET errno as end-of-stream --- src/muxer.h | 2 ++ src/muxer/muxer_pass.c | 2 +- src/muxer/muxer_tvh.c | 2 +- src/muxer/tvh/mkmux.c | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/muxer.h b/src/muxer.h index 223f5d34..ec72ccda 100644 --- a/src/muxer.h +++ b/src/muxer.h @@ -24,6 +24,8 @@ #define MC_REWRITE_PAT 0x0001 #define MC_REWRITE_PMT 0x0002 +#define MC_IS_EOS_ERROR(e) ((e) == EPIPE || (e) == ECONNRESET) + typedef enum { MC_UNKNOWN = 0, MC_MATROSKA = 1, diff --git a/src/muxer/muxer_pass.c b/src/muxer/muxer_pass.c index dde30266..cf28e84d 100644 --- a/src/muxer/muxer_pass.c +++ b/src/muxer/muxer_pass.c @@ -405,7 +405,7 @@ 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) + if (!MC_IS_EOS_ERROR(errno)) tvhlog(LOG_ERR, "pass", "%s: Write failed -- %s", pm->pm_filename, strerror(errno)); else diff --git a/src/muxer/muxer_tvh.c b/src/muxer/muxer_tvh.c index 4c38bb0d..f621f954 100644 --- a/src/muxer/muxer_tvh.c +++ b/src/muxer/muxer_tvh.c @@ -160,7 +160,7 @@ tvh_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data) assert(smt == SMT_PACKET); if((r = mk_mux_write_pkt(tm->tm_ref, pkt)) != 0) { - if (r == EPIPE) + if (MC_IS_EOS_ERROR(r)) tm->m_eos = 1; tm->m_errors++; return -1; diff --git a/src/muxer/tvh/mkmux.c b/src/muxer/tvh/mkmux.c index 8a5db9b1..5ccd51da 100644 --- a/src/muxer/tvh/mkmux.c +++ b/src/muxer/tvh/mkmux.c @@ -466,7 +466,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) && mkm->error != EPIPE) + if(!mkm->error && mk_write_to_fd(mkm, q) && !MC_IS_EOS_ERROR(mkm->error)) tvhlog(LOG_ERR, "mkv", "%s: Write failed -- %s", mkm->filename, strerror(errno));