diff options
author | Frank Schmirler <vdr@schmirler.de> | 2015-01-24 00:49:51 +0100 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2015-01-24 00:49:51 +0100 |
commit | 3e06c59196c78fa9c807744621fc173a02890da3 (patch) | |
tree | d7c413ce8c12658679aa1e7b0e344a265b56d7e7 /tools | |
parent | b33d2631df753bf4918f7967404620d5e605f967 (diff) | |
download | vdr-plugin-streamdev-3e06c59196c78fa9c807744621fc173a02890da3.tar.gz vdr-plugin-streamdev-3e06c59196c78fa9c807744621fc173a02890da3.tar.bz2 |
make sure TimedWrite(...) doesn't return failure after a slow but successful
write operation (refs #2045)
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/tools/source.c b/tools/source.c index 8a6b5f5..954405a 100644 --- a/tools/source.c +++ b/tools/source.c @@ -57,15 +57,20 @@ ssize_t cTBSource::Write(const void *Buffer, size_t Length) { bool cTBSource::TimedWrite(const void *Buffer, size_t Length, uint TimeoutMs) { cTBSelect sel; int ms, offs; - cTimeMs starttime; - ms = TimeoutMs; + offs = 0; sel.Clear(); sel.Add(m_Filed, true); while (Length > 0) { int b; + ms = TimeoutMs - starttime.Elapsed(); + if (ms <= 0) { + errno = ETIMEDOUT; + return false; + } + if (sel.Select(ms) == -1) return false; @@ -76,11 +81,6 @@ bool cTBSource::TimedWrite(const void *Buffer, size_t Length, uint TimeoutMs) { Length -= b; } - ms = TimeoutMs - starttime.Elapsed(); - if (ms <= 0) { - errno = ETIMEDOUT; - return false; - } } return true; } |