aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2014-09-23 09:41:32 -0700
committerGravatar Hoà V. DINH <dinh.viet.hoa@gmail.com>2014-09-23 09:41:32 -0700
commitd630534ea884caf3219d4048bc1f4eb40e1f9f83 (patch)
tree0d2708041f58b9de4f1638cf509005ab7d2e0100 /src
parent7a77d98f7ee0cbb6c8d526290097b52003ea3484 (diff)
parentf42c7b9805d3c6f688cbe3d46088d2c67989b80f (diff)
Merge pull request #883 from foxinushka/fix/operation-queue-thread-safety
Fixed thread safety in OperationQueue
Diffstat (limited to 'src')
-rw-r--r--src/core/basetypes/MCOperationQueue.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc
index e45f04ee..a2554ab5 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)
}