- mCurrentWork += amount;
- mMonitor(this->handle(false), CFSTR("progress"), CFTemp<CFDictionaryRef>("{current=%d,total=%d}", mCurrentWork, mTotalWork));
+ __block bool cancel = false;
+ dispatch_sync(mProgressQueue, ^{
+ if (mCancelPending)
+ cancel = true;
+ mCurrentWork += amount;
+ mMonitor(this->handle(false), CFSTR("progress"), CFTemp<CFDictionaryRef>("{current=%d,total=%d}", mCurrentWork, mTotalWork));
+ });
+ // if cancellation is pending, abort now
+ if (cancel)
+ MacOSError::throwMe(errSecCSCancelled);