From 06824bb8ee8793e07afe3220b6388581373782cd Mon Sep 17 00:00:00 2001 From: Arnt Gulbrandsen Date: Sat, 14 Feb 2015 18:00:46 +0100 Subject: [PATCH] Cope properly uidvalidity changes When e.g. a BDR script recovers from a database conflict, at least one mailbox needs to have reassigned UIDs. If anyone has that mailbox open meanwhile, aox should get rid of those connections. --- server/mailbox.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/mailbox.cpp b/server/mailbox.cpp index 76f0cd7..4d7bcdd 100644 --- a/server/mailbox.cpp +++ b/server/mailbox.cpp @@ -128,7 +128,11 @@ void MailboxReader::execute() { else m->setType( Mailbox::Ordinary ); - m->d->uidvalidity = r->getInt( "uidvalidity" ); + uint uidvalidity = r->getInt( "uidvalidity" ); + if ( m->d->uidvalidity != uidvalidity ) { + m->d->uidvalidity = uidvalidity; + m->abortSessions(); + } if ( !r->isNull( "owner" ) ) m->setOwner( r->getInt( "owner" ) ); @@ -684,7 +688,7 @@ void Mailbox::refreshMailboxes( class Transaction * t ) List * Mailbox::sessions() const { List * r = 0; - + List * connections = EventLoop::global()->connections(); List::Iterator i( connections ); while ( i ) { -- 2.1.4