From ff84e74fefdebb9d2c2c25e63a8ef08de9757581 Mon Sep 17 00:00:00 2001 From: Richard Braakman Date: Tue, 9 Sep 2014 16:06:14 +0300 Subject: [PATCH] [libcontacts] make sure UpdateRequest processing continues The logic for scheduling UpdateRequest events broke down when m_contactsToAppend went empty during a fetch request; even though more contacts were coming in through contactsAvailable, no more UpdateRequest events would be scheduled until the whole request was complete. Fixed by making m_updatesPending the definitive flag for whether there is an UpdateRequest event on the queue, rather than leaving it on during the whole fetch request. This change is safe because the flag was only inspected by the requestUpdate() helper and had no side meanings. Now all UpdateRequest event scheduling goes through requestUpdate(). --- src/seasidecache.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/seasidecache.cpp b/src/seasidecache.cpp index e246756..a0c0ed9 100644 --- a/src/seasidecache.cpp +++ b/src/seasidecache.cpp @@ -1751,6 +1751,7 @@ bool SeasideCache::event(QEvent *event) if (event->type() != QEvent::UpdateRequest) return QObject::event(event); + m_updatesPending = false; bool idleProcessing = false; startRequest(&idleProcessing); @@ -1766,14 +1767,11 @@ bool SeasideCache::event(QEvent *event) applyPendingContactUpdates(); // Send another event to trigger further processing - QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); + requestUpdate(); return true; } if (idleProcessing) { - // We have nothing pending to do - m_updatesPending = false; - // Remove expired contacts when all other activity has been processed if (!m_expiredContacts.isEmpty()) { QList removeIds; @@ -2217,6 +2215,7 @@ void SeasideCache::contactsAvailable() } else { m_contactsToAppend.insert(type, qMakePair(queryDetailTypes, contacts)); } + requestUpdate(); } else { if (m_activeResolve || (request == &m_fetchByIdRequest)) { // Process these results immediately @@ -2704,7 +2703,7 @@ void SeasideCache::requestStateChanged(QContactAbstractRequest::State state) } // See if there are any more requests to dispatch - QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); + requestUpdate(); } void SeasideCache::makePopulated(FilterType filter)