summaryrefslogtreecommitdiff
path: root/src/intent-client-lib/intentclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/intent-client-lib/intentclient.cpp')
-rw-r--r--src/intent-client-lib/intentclient.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/intent-client-lib/intentclient.cpp b/src/intent-client-lib/intentclient.cpp
index 0b8e3c3c..ff495d4d 100644
--- a/src/intent-client-lib/intentclient.cpp
+++ b/src/intent-client-lib/intentclient.cpp
@@ -86,6 +86,7 @@ IntentClient::IntentClient(IntentClientSystemInterface *systemInterface, QObject
: QObject(parent)
, m_systemInterface(systemInterface)
{
+ m_lastWaitingCleanup.start();
m_systemInterface->setParent(this);
}
@@ -197,8 +198,8 @@ void IntentClient::replyFromSystem(const QUuid &requestId, bool error, const QVa
{
IntentClientRequest *icr = nullptr;
auto it = std::find_if(m_waiting.cbegin(), m_waiting.cend(),
- [requestId](IntentClientRequest *ir) -> bool {
- return (ir->requestId() == requestId);
+ [requestId](const QPointer<IntentClientRequest> &ir) -> bool {
+ return ir && (ir->requestId() == requestId);
});
if (it == m_waiting.cend()) {
@@ -210,6 +211,12 @@ void IntentClient::replyFromSystem(const QUuid &requestId, bool error, const QVa
icr = *it;
m_waiting.erase(it);
+ // make sure to periodically remove all requests that were gc'ed before a reply was received
+ if (m_lastWaitingCleanup.elapsed() > 1000) {
+ m_waiting.removeAll({ });
+ m_lastWaitingCleanup.start();
+ }
+
if (error)
icr->setErrorMessage(result.value(qSL("errorMessage")).toString());
else