From b5f2bf1a71d926b9bb04101b49a11fd641aad14f Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 6 Oct 2017 13:09:57 +0200 Subject: Fix QWinEventNotifier for auto-reset events Auto-reset events are automatically reset to non-signaled when we get notified about the signaled state. This implies that we cannot check the event state again in activateEventNotifiers. Instead, store the signaled state in a QAtomicInt and test and decrement that. This amends commit 85403d0a. Task-number: QTBUG-63555 Change-Id: I0adee3d2929783f98d91060f9106c8b5266d72fa Reviewed-by: Oswald Buddenhagen --- src/corelib/kernel/qwineventnotifier.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/corelib/kernel/qwineventnotifier.cpp') diff --git a/src/corelib/kernel/qwineventnotifier.cpp b/src/corelib/kernel/qwineventnotifier.cpp index 6bfa6ca729..362111a2c8 100644 --- a/src/corelib/kernel/qwineventnotifier.cpp +++ b/src/corelib/kernel/qwineventnotifier.cpp @@ -157,6 +157,7 @@ void QWinEventNotifier::setHandle(HANDLE hEvent) Q_D(QWinEventNotifier); setEnabled(false); d->handleToEvent = hEvent; + d->signaledCount = 0; } /*! @@ -254,6 +255,7 @@ static void CALLBACK wfsoCallback(void *context, BOOLEAN /*ignore*/) QAbstractEventDispatcher *eventDispatcher = nd->threadData->eventDispatcher.load(); QEventDispatcherWin32Private *edp = QEventDispatcherWin32Private::get( static_cast(eventDispatcher)); + ++nd->signaledCount; SetEvent(edp->winEventNotifierActivatedEvent); } -- cgit v1.2.3