[Tickets #11823] Activesync push for empty folders loops

bugs at horde.org bugs at horde.org
Thu Dec 6 11:44:41 UTC 2012


Ticket URL: http://bugs.horde.org/ticket/11823
  Ticket             | 11823
  Created By         | horde at albasoft.com
  Summary            | Activesync push for empty folders loops
  Queue              | Synchronization
  Version            | Git master
  Type               | Bug
  State              | Unconfirmed
  Priority           | 2. Medium
  Milestone          |
  Patch              |
  Owners             |

horde at albasoft.com (2012-12-06 11:44) wrote:

I've found in my device log that PING command always returns status 2  
when the folder is empty, forcing the device to launch a SYNC command  
that will return no messages. And over again.

I've searched into the code and this is my report:
- First SYNC command (synckey 0) for an empty IMAP folder creates a  
new folder object with yet no status information (uidnext undef), and  
saves state to database at the end of folder sync (s:1:"s";a:0:{}).
- Second SYNC command (synckey {}1) for that folder loads state from  
database (no uidnext) and then runs message diff engine, getting the  
IMAP folder uidnext for its first time. If there were email messages,  
they would be sent and folder status saved again to database at end of  
folder sync, with proper uidnext. But there are no messages, and state  
is not saved to database, so uidnext remains undef.
- Then device sends a PING for that folder. Folder state is loaded  
from database, with uidnext still undef. Then diff engine is launched,  
but uidnext is still undef and when checking against real IMAP folder  
uidnext (0 <> xx) it will always report changes available, returning  
PING status 2.
- Third SYNC command from device, forced by PING status 2, will be  
exactly as previous second SYNC: no new messages but folder status  
will not be update with proper uidnext.
- Devices sends a new PING, and these two steps repeat many times  
until device desists.

I think that uidnext value should be updated to database folder state  
at some point in a SYNC command, so diff engine on a PING command  
could find that real and saved uidnext values are equal and report no  
changes to device.

More information about the bugs mailing list