Monotone-Parent: c128393b8fefa2da4bb9673a620d1e0baa64a839

Monotone-Revision: b334cb6723eed85e8c63c638f6db8a79edfb0b11

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2010-12-01T16:34:41
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2010-12-01 16:34:41 +00:00
parent 7c27e39fe7
commit 3e08125893
9 changed files with 40 additions and 23 deletions

View File

@@ -1,3 +1,11 @@
2010-12-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreContext.m: prevent leaks by adding an
additional mutable array that retains the required parent folders
until deallocation of the context.
(-getCommonTableChildproperty:atURL:withTag:inFolder:withFID:):
log the name of the missing properties for easier diagnostics.
2010-11-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* OpenChange/MAPIStoreMailContext.m

View File

@@ -59,8 +59,8 @@
userFolder = [SOGoUserFolder objectWithName: [authenticator username]
inContainer: MAPIApp];
[parentFoldersBag addObject: userFolder];
[woContext setClientObject: userFolder];
[userFolder retain]; // LEAK
moduleFolder = [userFolder lookupName: @"Calendar"
inContext: woContext

View File

@@ -61,8 +61,8 @@
userFolder = [SOGoUserFolder objectWithName: [authenticator username]
inContainer: MAPIApp];
[parentFoldersBag addObject: userFolder];
[woContext setClientObject: userFolder];
[userFolder retain]; // LEAK
moduleFolder = [userFolder lookupName: @"Contacts"
inContext: woContext

View File

@@ -57,6 +57,8 @@
NSString *uri;
NSMutableArray *parentFoldersBag;
NSMutableDictionary *objectCache;
NSMutableDictionary *messages;
MAPIStoreAuthenticator *authenticator;

View File

@@ -208,7 +208,7 @@ _prepareContextClass (struct mapistore_context *newMemCtx,
messages = [NSMutableDictionary new];
woContext = [WOContext contextWithRequest: nil];
[woContext retain];
parentFoldersBag = [NSMutableArray new];
moduleFolder = nil;
uri = nil;
baseContextSet = NO;
@@ -223,6 +223,8 @@ _prepareContextClass (struct mapistore_context *newMemCtx,
{
[self logWithFormat: @"-dealloc: %@", self];
[parentFoldersBag release];
[messageCache release];
[subfolderCache release];
[messages release];
@@ -609,6 +611,7 @@ _prepareContextClass (struct mapistore_context *newMemCtx,
// uint64_t *llongValue;
// uint32_t *longValue;
int rc;
const char *propName;
rc = MAPI_E_SUCCESS;
switch (proptag)
@@ -618,24 +621,27 @@ _prepareContextClass (struct mapistore_context *newMemCtx,
*data = [[child displayName] asUnicodeInMemCtx: memCtx];
break;
default:
// *data = NULL;
rc = MAPI_E_NOT_FOUND;
// rc = MAPI_E_NOT_FOUND;
// if ((proptag & 0x001F) == 0x001F)
// {
// stringValue = [NSString stringWithFormat: @"Unhandled unicode value: 0x%x", proptag];
// *data = [stringValue asUnicodeInMemCtx: memCtx];
// rc = MAPI_E_SUCCESS;
[self errorWithFormat: @"Unknown proptag (returned): %.8x for child '%@'",
proptag, childURL];
propName = get_proptag_name (proptag);
if (!propName)
propName = "<unknown>";
[self errorWithFormat: @"Unhandled value: 0x%x (%s), childURL: %@",
proptag, propName, childURL];
*data = NULL;
// *data = [stringValue asUnicodeInMemCtx: memCtx];
// rc = MAPI_E_SUCCESS;
// [self errorWithFormat: @"Unknown proptag (returned): %.8x for child '%@'",
// proptag, childURL];
// }
// }
// else
// {
// [self errorWithFormat: @"Unknown proptag: %.8x for child '%@'",
// proptag, childURL];
// *data = NULL;
rc = MAPI_E_NOT_FOUND;
break;
}
// *data = NULL;
rc = MAPI_E_NOT_FOUND;
break;
}
return rc;
}

View File

@@ -49,8 +49,8 @@
userFolder = [SOGoUserFolder objectWithName: [authenticator username]
inContainer: MAPIApp];
[parentFoldersBag addObject: userFolder];
[woContext setClientObject: userFolder];
[userFolder retain]; // LEAK
moduleFolder = [userFolder lookupName: @"Calendar"
inContext: woContext

View File

@@ -69,14 +69,14 @@
userFolder = [SOGoUserFolder objectWithName: [authenticator username]
inContainer: MAPIApp];
[parentFoldersBag addObject: userFolder];
[woContext setClientObject: userFolder];
[userFolder retain]; // LEAK
accountsFolder = [userFolder lookupName: @"Mail"
inContext: woContext
acquire: NO];
[parentFoldersBag addObject: accountsFolder];
[woContext setClientObject: accountsFolder];
[accountsFolder retain]; // LEAK
moduleFolder = [accountsFolder lookupName: @"0"
inContext: woContext

View File

@@ -58,19 +58,20 @@
userFolder = [SOGoUserFolder objectWithName: [authenticator username]
inContainer: MAPIApp];
[parentFoldersBag addObject: userFolder];
[woContext setClientObject: userFolder];
[userFolder retain]; // LEAK
accountsFolder = [userFolder lookupName: @"Mail"
inContext: woContext
acquire: NO];
[parentFoldersBag addObject: accountsFolder];
[woContext setClientObject: accountsFolder];
[accountsFolder retain]; // LEAK
accountFolder = [accountsFolder lookupName: @"0"
inContext: woContext
acquire: NO];
[accountFolder retain]; // LEAK
[parentFoldersBag addObject: accountFolder];
[woContext setClientObject: accountFolder];
moduleFolder = [accountFolder draftsFolderInContext: nil];
[moduleFolder retain];

View File

@@ -57,8 +57,8 @@
userFolder = [SOGoUserFolder objectWithName: [authenticator username]
inContainer: MAPIApp];
[parentFoldersBag addObject: userFolder];
[woContext setClientObject: userFolder];
[userFolder retain]; // LEAK
moduleFolder = [userFolder lookupName: @"Calendar"
inContext: woContext