From a7c2054cce0d3dd1a093d9f369e715b519751d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Fri, 22 Aug 2014 17:05:49 +0200 Subject: [PATCH] oc: cached usercontext updates indexing_context Instead of use always the one given on initialization --- OpenChange/MAPIStoreMapping.h | 1 + OpenChange/MAPIStoreMapping.m | 5 +++++ OpenChange/MAPIStoreUserContext.h | 2 ++ OpenChange/MAPIStoreUserContext.m | 14 +++++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/OpenChange/MAPIStoreMapping.h b/OpenChange/MAPIStoreMapping.h index 620112d76..13a8ba768 100644 --- a/OpenChange/MAPIStoreMapping.h +++ b/OpenChange/MAPIStoreMapping.h @@ -42,6 +42,7 @@ - (id) initForUsername: (NSString *) username withIndexing: (struct indexing_context *) indexing; +- (void) updateIndexing: (struct indexing_context *) indexing; - (void) increaseUseCount; - (void) decreaseUseCount; diff --git a/OpenChange/MAPIStoreMapping.m b/OpenChange/MAPIStoreMapping.m index 194488bc7..9346b156f 100644 --- a/OpenChange/MAPIStoreMapping.m +++ b/OpenChange/MAPIStoreMapping.m @@ -119,6 +119,11 @@ MAPIStoreMappingKeyFromId (uint64_t idNbr) return self; } +- (void) updateIndexing: (struct indexing_context *) newIndexing +{ + indexing = newIndexing; +} + - (void) dealloc { [username release]; diff --git a/OpenChange/MAPIStoreUserContext.h b/OpenChange/MAPIStoreUserContext.h index f9867d15a..32582271d 100644 --- a/OpenChange/MAPIStoreUserContext.h +++ b/OpenChange/MAPIStoreUserContext.h @@ -68,6 +68,8 @@ - (id) initWithUsername: (NSString *) newUsername andTDBIndexing: (struct indexing_context *) indexing; +- (void) updateIndexing: (struct indexing_context *) indexing; + - (NSString *) username; - (SOGoUser *) sogoUser; diff --git a/OpenChange/MAPIStoreUserContext.m b/OpenChange/MAPIStoreUserContext.m index 04300fd35..68d063e02 100644 --- a/OpenChange/MAPIStoreUserContext.m +++ b/OpenChange/MAPIStoreUserContext.m @@ -65,7 +65,14 @@ static NSMapTable *contextsTable = nil; id userContext; userContext = [contextsTable objectForKey: username]; - if (!userContext) + if (userContext) + { + // The indexing_context used when this user context was created + // could had been freed, so we have to update it and use the one + // that we receive as parameter (which is a valid one for sure). + [userContext updateIndexing: indexing]; + } + else { userContext = [[self alloc] initWithUsername: username andTDBIndexing: indexing]; @@ -76,6 +83,11 @@ static NSMapTable *contextsTable = nil; return userContext; } +- (void) updateIndexing: (struct indexing_context *) indexing +{ + [mapping updateIndexing: indexing]; +} + - (id) init { if ((self = [super init]))