mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-04-05 05:18:51 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
|
||||
NSString *uri;
|
||||
|
||||
NSMutableArray *parentFoldersBag;
|
||||
|
||||
NSMutableDictionary *objectCache;
|
||||
NSMutableDictionary *messages;
|
||||
MAPIStoreAuthenticator *authenticator;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user