aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/async/pop
diff options
context:
space:
mode:
Diffstat (limited to 'src/async/pop')
-rw-r--r--src/async/pop/MCPOPOperation.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/async/pop/MCPOPOperation.cc b/src/async/pop/MCPOPOperation.cc
index 7fb279d6..76ecdb82 100644
--- a/src/async/pop/MCPOPOperation.cc
+++ b/src/async/pop/MCPOPOperation.cc
@@ -73,14 +73,22 @@ void POPOperation::bodyProgress(POPSession * session, unsigned int current, unsi
struct progressContext * context = (struct progressContext *) calloc(sizeof(* context), 1);
context->current = current;
context->maximum = maximum;
+
+ retain();
performMethodOnMainThread((Object::Method) &POPOperation::bodyProgressOnMainThread, context);
}
void POPOperation::bodyProgressOnMainThread(void * ctx)
{
+ if (isCancelled()) {
+ release();
+ return;
+ }
+
struct progressContext * context = (struct progressContext *) ctx;
if (mPopCallback != NULL) {
mPopCallback->bodyProgress(this, context->current, context->maximum);
}
free(context);
+ release();
}