diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2013-03-26 21:35:12 +0400 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-29 16:19:40 +0100 |
commit | 733cbdf20779cec4ccafdd9d2068d44be2268033 (patch) | |
tree | a99ab8e33e6baa6de3f7ef6816aef6fd12207ec0 | |
parent | 327582d562f198ac6d028dd8fb115bf043cec7dc (diff) | |
download | qtserialport-733cbdf20779cec4ccafdd9d2068d44be2268033.tar.gz |
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>
-rw-r--r-- | src/serialport/qserialport_win.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 0e9e18b..d062583 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; } |