summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2013-03-26 21:35:12 +0400
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-29 16:19:40 +0100
commit733cbdf20779cec4ccafdd9d2068d44be2268033 (patch)
treea99ab8e33e6baa6de3f7ef6816aef6fd12207ec0 /src
parent327582d562f198ac6d028dd8fb115bf043cec7dc (diff)
Win32: Truncate read buffer when ReadFile returns error
Previously reserved read buffer must be truncated when reading error occurs. Also reserve() method is moved down after method lookupReadCompletionNotifier(). So we get rid of an additional truncate() method when lookup can return null pointer. Change-Id: I843ff6043b31da892a93d93b8b4209ce8f10a7d2 Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/serialport/qserialport_win.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp
index 0e9e18bf..d0625839 100644
--- a/src/serialport/qserialport_win.cpp
+++ b/src/serialport/qserialport_win.cpp
@@ -635,14 +635,14 @@ bool QSerialPortPrivate::startAsyncRead()
}
}
- char *ptr = readBuffer.reserve(bytesToRead);
-
AbstractOverlappedEventNotifier *n = lookupReadCompletionNotifier();
if (!n) {
q_ptr->setError(QSerialPort::ResourceError);
return false;
}
+ char *ptr = readBuffer.reserve(bytesToRead);
+
if (::ReadFile(descriptor, ptr, bytesToRead, NULL, n->overlappedPointer()))
return true;
@@ -651,6 +651,8 @@ bool QSerialPortPrivate::startAsyncRead()
if (error != QSerialPort::ResourceError)
error = QSerialPort::ReadError;
q_ptr->setError(error);
+
+ readBuffer.truncate(actualReadBufferSize);
return false;
}