From c3a407efefc3367f580173e62e6abe0500bc6e81 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 15 Aug 2011 19:10:00 +0000 Subject: [PATCH] Monotone-Parent: 0dcc6bf2d5286e03f2a6c9e8cd2e0a71cc598ae4 Monotone-Revision: 360795eba52fb9152f5379fc602e210022498ae1 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-08-15T19:10:00 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 +++ OpenChange/MAPIStoreMailMessage.m | 24 ++++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7ea975e60..e48fa0fdb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2011-08-15 Wolfgang Sourdeau + * OpenChange/MAPIStoreMailMessage.m (-objectVersion): updated code + as in MAPIStoreGCSMessage's version. + * OpenChange/MAPIStoreMailFolder.m (-messageTable): we no longer cache the table object as we don't want to assign different handles to the same memory object, causing inconsistencies with diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 1e8b27ba0..8fab6ba51 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -275,12 +275,24 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) container messageUIDFromMessageKey: [self nameInContainer]]; if (uid) { - changeNumber = [(MAPIStoreMailFolder *) - container changeNumberForMessageUID: uid]; - if (changeNumber) - version = [changeNumber unsignedLongLongValue] >> 16; - else - abort (); + changeNumber = [(MAPIStoreMailFolder *) container + changeNumberForMessageUID: uid]; + if (!changeNumber) + { + [self warnWithFormat: @"attempting to get change number" + @" by synchronising folder..."]; + [(MAPIStoreMailFolder *) container synchroniseCache]; + changeNumber = [(MAPIStoreMailFolder *) container + changeNumberForMessageUID: uid]; + if (changeNumber) + [self logWithFormat: @"got one"]; + else + { + [self errorWithFormat: @"still nothing. We crash!"]; + abort (); + } + } + version = [changeNumber unsignedLongLongValue] >> 16; } else abort ();