From 3e06c59196c78fa9c807744621fc173a02890da3 Mon Sep 17 00:00:00 2001 From: Frank Schmirler Date: Sat, 24 Jan 2015 00:49:51 +0100 Subject: make sure TimedWrite(...) doesn't return failure after a slow but successful write operation (refs #2045) --- tools/source.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'tools') 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; } -- cgit v1.2.3