diff options
author | Shane Kearns <shane.kearns@accenture.com> | 2011-08-02 15:06:05 +0100 |
---|---|---|
committer | Shane Kearns <shane.kearns@accenture.com> | 2011-08-02 15:25:56 +0100 |
commit | 8479ef846a60c230be3f5af470ec5129bc4375f3 (patch) | |
tree | 8672fe9478aab8728eb4504b6317f87a92c168d9 | |
parent | cb678ebc0ba9d804050c67418e8eb46962bf3bc0 (diff) |
runonphone: fix failure to terminate
In some cases, the serial port is always completing with no error
and zero bytes read.
In this case, runonphone would not shut down properly as the
terminate file descriptor was never read.
Reviewed-By: mread
-rw-r--r-- | tools/runonphone/symbianutils/trkdevice.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/tools/runonphone/symbianutils/trkdevice.cpp b/tools/runonphone/symbianutils/trkdevice.cpp index c6dc0a4394..e28e70e3ff 100644 --- a/tools/runonphone/symbianutils/trkdevice.cpp +++ b/tools/runonphone/symbianutils/trkdevice.cpp @@ -694,7 +694,7 @@ public slots: void terminate(); private: - enum Handles { FileHandle, TerminateEventHandle, HandleCount }; + enum Handles { TerminateEventHandle, FileHandle, HandleCount }; inline int tryRead(); @@ -727,7 +727,7 @@ int WinReaderThread::tryRead() const DWORD bytesToRead = qMax(DWORD(1), qMin(comStat.cbInQue, DWORD(BufSize))); // Trigger read DWORD bytesRead = 0; - if (ReadFile(m_context->device, &buffer, bytesToRead, &bytesRead, &m_context->readOverlapped)) { + if (ReadFile(m_context->device, &buffer, bytesToRead, &bytesRead, &m_context->readOverlapped) && bytesRead > 0) { if (bytesRead == 1) { processData(buffer[0]); } else { @@ -736,7 +736,7 @@ int WinReaderThread::tryRead() return 0; } const DWORD readError = GetLastError(); - if (readError != ERROR_IO_PENDING) { + if (readError != ERROR_IO_PENDING && readError != 0) { emit error(QString::fromLatin1("Read error: %1").arg(winErrorMessage(readError))); return -1; } |