diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/resourceaccess.cpp | 21 | ||||
-rw-r--r-- | common/resourceaccess.h | 2 |
2 files changed, 15 insertions, 8 deletions
diff --git a/common/resourceaccess.cpp b/common/resourceaccess.cpp index 5e15786..68bbb7a 100644 --- a/common/resourceaccess.cpp +++ b/common/resourceaccess.cpp | |||
@@ -676,8 +676,7 @@ Sink::ResourceAccess::Ptr ResourceAccessFactory::getAccess(const QByteArray &ins | |||
676 | if (!mCache.contains(instanceIdentifier)) { | 676 | if (!mCache.contains(instanceIdentifier)) { |
677 | // Reuse the pointer if something else kept the resourceaccess alive | 677 | // Reuse the pointer if something else kept the resourceaccess alive |
678 | if (mWeakCache.contains(instanceIdentifier)) { | 678 | if (mWeakCache.contains(instanceIdentifier)) { |
679 | auto sharedPointer = mWeakCache.value(instanceIdentifier).toStrongRef(); | 679 | if (auto sharedPointer = mWeakCache.value(instanceIdentifier).toStrongRef()) { |
680 | if (sharedPointer) { | ||
681 | mCache.insert(instanceIdentifier, sharedPointer); | 680 | mCache.insert(instanceIdentifier, sharedPointer); |
682 | } | 681 | } |
683 | } | 682 | } |
@@ -686,7 +685,12 @@ Sink::ResourceAccess::Ptr ResourceAccessFactory::getAccess(const QByteArray &ins | |||
686 | auto sharedPointer = Sink::ResourceAccess::Ptr::create(instanceIdentifier, resourceType); | 685 | auto sharedPointer = Sink::ResourceAccess::Ptr::create(instanceIdentifier, resourceType); |
687 | QObject::connect(sharedPointer.data(), &Sink::ResourceAccess::ready, sharedPointer.data(), [this, instanceIdentifier](bool ready) { | 686 | QObject::connect(sharedPointer.data(), &Sink::ResourceAccess::ready, sharedPointer.data(), [this, instanceIdentifier](bool ready) { |
688 | if (!ready) { | 687 | if (!ready) { |
689 | mCache.remove(instanceIdentifier); | 688 | //We want to remove, but we don't want shared pointer to be destroyed until end of the function as this might trigger further steps. |
689 | auto ptr = mCache.take(instanceIdentifier); | ||
690 | if (auto timer = mTimer.take(instanceIdentifier)) { | ||
691 | timer->stop(); | ||
692 | } | ||
693 | Q_UNUSED(ptr); | ||
690 | } | 694 | } |
691 | }); | 695 | }); |
692 | mCache.insert(instanceIdentifier, sharedPointer); | 696 | mCache.insert(instanceIdentifier, sharedPointer); |
@@ -694,15 +698,18 @@ Sink::ResourceAccess::Ptr ResourceAccessFactory::getAccess(const QByteArray &ins | |||
694 | } | 698 | } |
695 | } | 699 | } |
696 | if (!mTimer.contains(instanceIdentifier)) { | 700 | if (!mTimer.contains(instanceIdentifier)) { |
697 | auto timer = new QTimer; | 701 | auto timer = QSharedPointer<QTimer>::create(); |
698 | timer->setSingleShot(true); | 702 | timer->setSingleShot(true); |
699 | // Drop connection after 3 seconds (which is a random value) | 703 | // Drop connection after 3 seconds (which is a random value) |
700 | QObject::connect(timer, &QTimer::timeout, timer, [this, instanceIdentifier]() { mCache.remove(instanceIdentifier); }); | 704 | QObject::connect(timer.data(), &QTimer::timeout, timer.data(), [this, instanceIdentifier]() { |
705 | //We want to remove, but we don't want shared pointer to be destroyed until end of the function as this might trigger further steps. | ||
706 | auto ptr = mCache.take(instanceIdentifier); | ||
707 | Q_UNUSED(ptr); | ||
708 | }); | ||
701 | timer->setInterval(3000); | 709 | timer->setInterval(3000); |
702 | mTimer.insert(instanceIdentifier, timer); | 710 | mTimer.insert(instanceIdentifier, timer); |
703 | } | 711 | } |
704 | auto timer = mTimer.value(instanceIdentifier); | 712 | mTimer.value(instanceIdentifier)->start(); |
705 | timer->start(); | ||
706 | return mCache.value(instanceIdentifier); | 713 | return mCache.value(instanceIdentifier); |
707 | } | 714 | } |
708 | } | 715 | } |
diff --git a/common/resourceaccess.h b/common/resourceaccess.h index 890cc6d..7df6a1b 100644 --- a/common/resourceaccess.h +++ b/common/resourceaccess.h | |||
@@ -169,6 +169,6 @@ public: | |||
169 | 169 | ||
170 | QHash<QByteArray, QWeakPointer<Sink::ResourceAccess>> mWeakCache; | 170 | QHash<QByteArray, QWeakPointer<Sink::ResourceAccess>> mWeakCache; |
171 | QHash<QByteArray, Sink::ResourceAccess::Ptr> mCache; | 171 | QHash<QByteArray, Sink::ResourceAccess::Ptr> mCache; |
172 | QHash<QByteArray, QTimer *> mTimer; | 172 | QHash<QByteArray, QSharedPointer<QTimer>> mTimer; |
173 | }; | 173 | }; |
174 | } | 174 | } |