aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/basetypes')
-rw-r--r--src/core/basetypes/MCOperationQueue.cc20
-rw-r--r--src/core/basetypes/MCOperationQueue.h2
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();
};