From 733cbdf20779cec4ccafdd9d2068d44be2268033 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Tue, 26 Mar 2013 21:35:12 +0400 Subject: 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 Reviewed-by: Denis Shienkov --- src/serialport/qserialport_win.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3