diff options
author | Hoa V. Dinh <dinh.viet.hoa@gmail.com> | 2013-07-25 23:09:37 -0700 |
---|---|---|
committer | Hoa V. Dinh <dinh.viet.hoa@gmail.com> | 2013-07-25 23:09:37 -0700 |
commit | c559c8834773c4d6d78cb0cccc968d2a3477f67a (patch) | |
tree | aa5daeec68ac98f5cee85333ee3fa9baa3d6e2cd /src/objc/imap/MCOIMAPFetchFoldersOperation.mm | |
parent | b27f76a56eebe7e297e9f7c2f00bf3b0eb61d662 (diff) |
Fixed memory leak on cancellation in ObjC API
Diffstat (limited to 'src/objc/imap/MCOIMAPFetchFoldersOperation.mm')
-rw-r--r-- | src/objc/imap/MCOIMAPFetchFoldersOperation.mm | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/objc/imap/MCOIMAPFetchFoldersOperation.mm b/src/objc/imap/MCOIMAPFetchFoldersOperation.mm index 02b7d880..facccca3 100644 --- a/src/objc/imap/MCOIMAPFetchFoldersOperation.mm +++ b/src/objc/imap/MCOIMAPFetchFoldersOperation.mm @@ -43,19 +43,29 @@ typedef void (^CompletionType)(NSError *error, NSArray *folder); [super dealloc]; } -- (void)start:(void (^)(NSError *error, NSArray * /* MCOIMAPFolder */ folders))completionBlock { +- (void) start:(void (^)(NSError *error, NSArray * /* MCOIMAPFolder */ folders))completionBlock +{ _completionBlock = [completionBlock copy]; [self start]; } -- (void)operationCompleted { +- (void) cancel +{ + [_completionBlock release]; + _completionBlock = nil; + [super cancel]; +} + +- (void)operationCompleted +{ if (_completionBlock == NULL) return; nativeType *op = MCO_NATIVE_INSTANCE; if (op->error() == ErrorNone) { _completionBlock(nil, MCO_TO_OBJC(op->folders())); - } else { + } + else { _completionBlock([NSError mco_errorWithErrorCode:op->error()], nil); } [_completionBlock release]; |