diff options
Diffstat (limited to 'src/core/basetypes/MCOperationQueue.cc')
-rw-r--r-- | src/core/basetypes/MCOperationQueue.cc | 15 |
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) |