aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes/MCOperationQueue.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/basetypes/MCOperationQueue.cc')
-rw-r--r--src/core/basetypes/MCOperationQueue.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc
index e45f04ee..7783a978 100644
--- a/src/core/basetypes/MCOperationQueue.cc
+++ b/src/core/basetypes/MCOperationQueue.cc
@@ -178,11 +178,21 @@ void OperationQueue::checkRunningOnMainThread(void * context)
{
retain(); // (4)
if (_pendingCheckRunning) {
+#if __APPLE__
+ cancelDelayedPerformMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL, mDispatchQueue);
+#else
cancelDelayedPerformMethod((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL);
+#endif
release(); // (4)
}
_pendingCheckRunning = true;
+
+#if __APPLE__
+ performMethodOnDispatchQueueAfterDelay((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL, mDispatchQueue, 1);
+#else
performMethodAfterDelay((Object::Method) &OperationQueue::checkRunningAfterDelay, NULL, 1);
+#endif
+
release(); // (1)
}
@@ -215,6 +225,11 @@ void OperationQueue::stoppedOnMainThread(void * context)
mCallback->queueStoppedRunning();
}
+ if (mOperations->count() > 0) {
+ //Operations have been added while thread was quitting, so restart automatically
+ startThread();
+ }
+
release(); // (2)
release(); // (3)