diff options
Diffstat (limited to 'src/core/basetypes')
-rw-r--r-- | src/core/basetypes/MCOperationQueue.cc | 20 | ||||
-rw-r--r-- | src/core/basetypes/MCOperationQueue.h | 2 |
2 files changed, 18 insertions, 4 deletions
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc index aa2e0193..52c58385 100644 --- a/src/core/basetypes/MCOperationQueue.cc +++ b/src/core/basetypes/MCOperationQueue.cc @@ -93,21 +93,22 @@ void OperationQueue::runOperations() op->main(); - if (op->callback() != NULL) { - performMethodOnMainThread((Object::Method) &OperationQueue::callbackOnMainThread, op, true); - } + op->retain()->autorelease(); pthread_mutex_lock(&mLock); mOperations->removeObjectAtIndex(0); if (mOperations->count() == 0) { if (mWaiting) { - //sem_post(&mWaitingFinishedSem); mailsem_up(mWaitingFinishedSem); } needsCheckRunning = true; } pthread_mutex_unlock(&mLock); + if (op->callback() != NULL) { + performMethodOnMainThread((Object::Method) &OperationQueue::callbackOnMainThread, op, true); + } + if (needsCheckRunning) { retain(); // (1) performMethodOnMainThread((Object::Method) &OperationQueue::checkRunningOnMainThread, this); @@ -165,6 +166,17 @@ void OperationQueue::startThread() mailsem_down(mStartSem); } +unsigned int OperationQueue::count() +{ + unsigned int count; + + pthread_mutex_lock(&mLock); + count = mOperations->count(); + pthread_mutex_unlock(&mLock); + + return count; +} + #if 0 void OperationQueue::waitUntilAllOperationsAreFinished() { diff --git a/src/core/basetypes/MCOperationQueue.h b/src/core/basetypes/MCOperationQueue.h index b858aebc..c584f33a 100644 --- a/src/core/basetypes/MCOperationQueue.h +++ b/src/core/basetypes/MCOperationQueue.h @@ -37,6 +37,8 @@ namespace mailcore { virtual void addOperation(Operation * op); + virtual unsigned int count(); + //virtual void waitUntilAllOperationsAreFinished(); }; |