diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2015-08-27 12:16:15 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2015-08-27 12:47:46 +0000 |
commit | bec0b027f802d20dee00a33e9bc83d1d07b2dd42 (patch) | |
tree | 834ca6a957c25cb3841544e1b7fff5a978652755 /src/serialport/qserialport_win.cpp | |
parent | 8f7cd12c08095c17e96c3baf2076679529742023 (diff) |
Avoid to start of communication notifier if it already is active
This happens in the QSP::clear() method, where the WaitCommEvent()
function returns with an error "The parameter is incorrect",
because it calls when the waiting already is active.
Tested with the virtual com0com and on-board serial ports.
Change-Id: I351a336f2d3c05852a654e7bccc3ff84d7aba025
Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com>
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Diffstat (limited to 'src/serialport/qserialport_win.cpp')
-rw-r--r-- | src/serialport/qserialport_win.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/serialport/qserialport_win.cpp b/src/serialport/qserialport_win.cpp index 6a1a941c..0c61d36c 100644 --- a/src/serialport/qserialport_win.cpp +++ b/src/serialport/qserialport_win.cpp @@ -400,6 +400,8 @@ bool QSerialPortPrivate::setDataErrorPolicy(QSerialPort::DataErrorPolicy policy) bool QSerialPortPrivate::completeAsyncCommunication(qint64 bytesTransferred) { + communicationStarted = false; + if (bytesTransferred == qint64(-1)) return false; if (EV_ERR & triggeredEventMask) @@ -453,6 +455,9 @@ bool QSerialPortPrivate::completeAsyncWrite(qint64 bytesTransferred) bool QSerialPortPrivate::startAsyncCommunication() { + if (communicationStarted) + return true; + ::ZeroMemory(&communicationOverlapped, sizeof(communicationOverlapped)); if (!::WaitCommEvent(handle, &triggeredEventMask, &communicationOverlapped)) { QSerialPortErrorInfo error = getSystemError(); @@ -463,6 +468,7 @@ bool QSerialPortPrivate::startAsyncCommunication() return false; } } + communicationStarted = true; return true; } |