From f6b43c36b3839dae54308a6437bbdd99ae9a44de Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Fri, 6 Sep 2019 21:19:52 +0300 Subject: Revert "Emit _q_notify only if there's no notification pending" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 85ee2c658a45d2958a54045951d236769640337f. That commit completely breaks the I/O on Windows. Task-number: QTBUG-78086 Change-Id: I9125967d6cb5b1cb4e33d0bad80ee66322e5ccc7 Reviewed-by: Jörg Bornemann --- src/serialport/qwinoverlappedionotifier.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/serialport/qwinoverlappedionotifier.cpp b/src/serialport/qwinoverlappedionotifier.cpp index 233ee69..615dacc 100644 --- a/src/serialport/qwinoverlappedionotifier.cpp +++ b/src/serialport/qwinoverlappedionotifier.cpp @@ -129,7 +129,6 @@ public: HANDLE hSemaphore = nullptr; HANDLE hResultsMutex = nullptr; QAtomicInt waiting; - QAtomicInt pendingNotifications; QQueue results; }; @@ -396,17 +395,14 @@ void QWinOverlappedIoNotifierPrivate::notify(DWORD numberOfBytes, DWORD errorCod results.enqueue(IOResult(numberOfBytes, errorCode, overlapped)); ReleaseMutex(hResultsMutex); ReleaseSemaphore(hSemaphore, 1, NULL); - if (!waiting && pendingNotifications-- == 0) + if (!waiting) emit q->_q_notify(); } void QWinOverlappedIoNotifierPrivate::_q_notified() { - int n = pendingNotifications.fetchAndStoreAcquire(0); - while (--n >= 0) { - if (WaitForSingleObject(hSemaphore, 0) == WAIT_OBJECT_0) - dispatchNextIoResult(); - } + if (WaitForSingleObject(hSemaphore, 0) == WAIT_OBJECT_0) + dispatchNextIoResult(); } OVERLAPPED *QWinOverlappedIoNotifierPrivate::dispatchNextIoResult() -- cgit v1.2.1