Attempt to sync an UID in setChangeKey to avoid crashing

This may happen if between sync cache and setChangeKey a modSeq
is making synchroniseCache not retrieve the newly stored message.

This should fix the following crash:

https://tracker.zentyal.org/issues/2673
pull/69/head
Enrique J. Hernández Blasco 2014-11-29 08:07:41 +01:00
parent a8b716fbaa
commit 7691d616a9
1 changed files with 10 additions and 2 deletions

View File

@ -757,7 +757,6 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data)
messageEntry = [messages objectForKey: messageUID];
if (!messageEntry)
{
[messages removeObjectForKey: messageUID];
changeNumber = [[self context] getNewChangeNumber];
fetchResults = [(NSDictionary *) [sogoObject fetchUIDs: [NSArray arrayWithObject: messageUID]
parts: [NSArray arrayWithObject: @"modseq"]]
@ -844,12 +843,21 @@ _compareFetchResultsByMODSEQ (id entry1, id entry2, void *data)
{
NSMutableDictionary *messages, *messageEntry;
NSString *messageUid;
BOOL synced;
messageUid = [self messageUIDFromMessageKey: messageKey];
messages = [[versionsMessage properties] objectForKey: @"Messages"];
messageEntry = [messages objectForKey: messageUid];
if (!messageEntry)
abort ();
{
[self warnWithFormat: @"attempting to synchronise to set the change key for "
@"this message %@", messageKey];
synced = [self synchroniseCacheForUID: messageUid];
if (synced)
messageEntry = [[[versionsMessage properties] objectForKey: @"Messages"] objectForKey: messageUid];
else
abort ();
}
[self _setChangeKey: changeKey forMessageEntry: messageEntry];
[versionsMessage save];