Author: norman
Date: Fri Feb  4 07:03:13 2011
New Revision: 1067101

URL: http://svn.apache.org/viewvc?rev=1067101&view=rev
Log:
Fix Race-condition in MailboxEventAnalyzer. See IMAP-254

Modified:
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java?rev=1067101&r1=1067100&r2=1067101&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MailboxEventAnalyser.java
 Fri Feb  4 07:03:13 2011
@@ -62,7 +62,7 @@ public class MailboxEventAnalyser implem
      * 
      * @return name
      */
-    public MailboxPath getMailboxPath() {
+    public synchronized MailboxPath getMailboxPath() {
         return mailboxPath;
     }
 
@@ -71,7 +71,7 @@ public class MailboxEventAnalyser implem
      * 
      * @param mailboxName
      */
-    public void setMailboxPath(MailboxPath mailboxPath) {
+    public synchronized void setMailboxPath(MailboxPath mailboxPath) {
         this.mailboxPath = mailboxPath;
     }
 
@@ -96,11 +96,15 @@ public class MailboxEventAnalyser implem
                     if (interestingFlags(updated)
                             && (sessionId != eventSessionId || 
!silentFlagChanges)) {
                         final Long uidObject = uid;
-                        flagUpdateUids.add(uidObject);
+                        synchronized (flagUpdateUids) {
+                            flagUpdateUids.add(uidObject);
+                        }
                     }
                 } else if (messageEvent instanceof Expunged) {
                     final Long uidObject = uid;
-                    expungedUids.add(uidObject);
+                    synchronized (expungedUids) {
+                        expungedUids.add(uidObject);
+                    }
                 }
             } else if (event instanceof MailboxDeletion) {
                 if (eventSessionId != sessionId) {
@@ -132,7 +136,7 @@ public class MailboxEventAnalyser implem
     /**
      * Reset the analyzer
      */
-    public void reset() {
+    public synchronized void reset() {
         sizeChanged = false;
         flagUpdateUids.clear();
         expungedUids.clear();
@@ -186,7 +190,9 @@ public class MailboxEventAnalyser implem
      */
     
     public Collection<Long> flagUpdateUids() {
-        return Collections.unmodifiableSet(flagUpdateUids);
+        synchronized (flagUpdateUids) {
+            return Collections.unmodifiableSet(flagUpdateUids);
+        }
     }
 
     /**
@@ -195,7 +201,9 @@ public class MailboxEventAnalyser implem
      * @return uids
      */
     public Collection<Long> expungedUids() {
-        return Collections.unmodifiableSet(expungedUids);
+        synchronized (expungedUids) {
+            return Collections.unmodifiableSet(expungedUids);
+        }
     }
 
     /**
@@ -204,7 +212,9 @@ public class MailboxEventAnalyser implem
      * @return hasUids
      */
     public boolean hasExpungedUids() {
-        return !expungedUids.isEmpty();
+        synchronized (expungedUids) {
+            return !expungedUids.isEmpty();
+        }
     }
 
     /**



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

Reply via email to