Author: wstrzalka
Date: Tue Mar 22 19:08:12 2011
New Revision: 1084299

URL: http://svn.apache.org/viewvc?rev=1084299&view=rev
Log:
Unsolicitated EXISTS potential race condition fix. See IMAP-268

Modified:
    
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java

Modified: 
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/api/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java?rev=1084299&r1=1084298&r2=1084299&view=diff
==============================================================================
--- 
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java
 (original)
+++ 
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java
 Tue Mar 22 19:08:12 2011
@@ -81,6 +81,13 @@ public interface SelectedMailbox {
      * @return recentCount
      */
     public int recentCount();
+    
+    /**
+     * Return the count of all existing uids
+     * 
+     * @return existsCount
+     */
+    public long existsCount();
 
     /**
      * Return the path of the selected Mailbox
@@ -165,4 +172,5 @@ public interface SelectedMailbox {
      * @return lastUid
      */
     public long getLastUid();
+
 }
\ No newline at end of file

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java?rev=1084299&r1=1084298&r2=1084299&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
 Tue Mar 22 19:08:12 2011
@@ -219,16 +219,10 @@ abstract public class AbstractMailboxPro
 
     private void addExistsResponses(final ImapSession session, final 
SelectedMailbox selected, 
             final ImapProcessor.Responder responder) {
-        try {
-            final MessageManager mailbox = getMailbox(session, selected);
-            final MailboxSession mailboxSession = 
ImapSessionUtils.getMailboxSession(session);
-            final long messageCount = mailbox.getMessageCount(mailboxSession);
-            // TODO: use factory
-            final ExistsResponse response = new ExistsResponse(messageCount);
-            responder.respond(response);
-        } catch (MailboxException e) {
-            handleResponseException(responder, e, 
HumanReadableText.FAILURE_EXISTS_COUNT, session);
-        }
+        final long existsCount = selected.existsCount();
+        // TODO: use factory
+        final ExistsResponse response = new ExistsResponse(existsCount);
+        responder.respond(response);
     }
 
     private void handleResponseException(final ImapProcessor.Responder 
responder,

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java?rev=1084299&r1=1084298&r2=1084299&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
 Tue Mar 22 19:08:12 2011
@@ -138,6 +138,10 @@ public class SelectedMailboxImpl impleme
         checkExpungedRecents();
         return recentUids.size();
     }
+    
+    public long existsCount() {
+        return converter.getCount();
+    }
 
     /* (non-Javadoc)
      * @see org.apache.james.imap.api.process.SelectedMailbox#getPath()

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java?rev=1084299&r1=1084298&r2=1084299&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java
 Tue Mar 22 19:08:12 2011
@@ -189,4 +189,11 @@ public class UidToMsnConverter implement
     public synchronized boolean isClosed() {
         return closed;
     }
+
+    /**
+     * @see SelectedMailbox#existsCount()
+     */
+    public synchronized long getCount() {
+        return uidToMsn.size();
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to