aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-01-18 16:28:12 -0800
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-01-18 16:28:12 -0800
commit5b151becd1f950254ab9b7a5effd66210792247a (patch)
tree1e60a2ae2bd83adfa7ce3dd02dd199ae2a34406e /src/core
parent73de12e926af32038bb5c0b508289f9db51ebfc2 (diff)
Implemented dispatchQueue property on MCOIMAPSession
Diffstat (limited to 'src/core')
-rw-r--r--src/core/basetypes/MCOperationQueue.cc23
-rw-r--r--src/core/basetypes/MCOperationQueue.h8
2 files changed, 31 insertions, 0 deletions
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc
index 50b2416c..76a76bc7 100644
--- a/src/core/basetypes/MCOperationQueue.cc
+++ b/src/core/basetypes/MCOperationQueue.cc
@@ -25,6 +25,9 @@ OperationQueue::OperationQueue()
mWaitingFinishedSem = mailsem_new();
mQuitting = false;
mCallback = NULL;
+#if __APPLE__
+ mDispatchQueue = dispatch_get_main_queue();
+#endif
}
OperationQueue::~OperationQueue()
@@ -78,7 +81,11 @@ void OperationQueue::runOperations()
mailsem_up(mStopSem);
retain(); // (2)
+#if __APPLE__
+ performMethodOnDispatchQueue((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, mDispatchQueue, true);
+#else
performMethodOnMainThread((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, true);
+#endif
pool->release();
break;
@@ -107,7 +114,11 @@ void OperationQueue::runOperations()
if (needsCheckRunning) {
retain(); // (1)
MCLog("check running %p", this);
+#if __APPLE__
+ performMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningOnMainThread, this, mDispatchQueue);
+#else
performMethodOnMainThread((Object::Method) &OperationQueue::checkRunningOnMainThread, this);
+#endif
}
pool->release();
@@ -239,3 +250,15 @@ void OperationQueue::waitUntilAllOperationsAreFinished()
mWaiting = false;
}
#endif
+
+#if __APPLE__
+void OperationQueue::setDispatchQueue(dispatch_queue_t dispatchQueue)
+{
+ mDispatchQueue = dispatchQueue;
+}
+
+dispatch_queue_t OperationQueue::dispatchQueue()
+{
+ return mDispatchQueue;
+}
+#endif
diff --git a/src/core/basetypes/MCOperationQueue.h b/src/core/basetypes/MCOperationQueue.h
index cd61b249..f343c603 100644
--- a/src/core/basetypes/MCOperationQueue.h
+++ b/src/core/basetypes/MCOperationQueue.h
@@ -27,6 +27,11 @@ namespace mailcore {
virtual void setCallback(OperationQueueCallback * callback);
virtual OperationQueueCallback * callback();
+#ifdef __APPLE__
+ virtual void setDispatchQueue(dispatch_queue_t dispatchQueue);
+ virtual dispatch_queue_t dispatchQueue();
+#endif
+
private:
Array * mOperations;
pthread_t mThreadID;
@@ -39,6 +44,9 @@ namespace mailcore {
struct mailsem * mWaitingFinishedSem;
bool mQuitting;
OperationQueueCallback * mCallback;
+#if __APPLE__
+ dispatch_queue_t mDispatchQueue;
+#endif
void startThread();
static void runOperationsOnThread(OperationQueue * queue);