james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nor...@apache.org
Subject svn commit: r1087851 - /james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
Date Fri, 01 Apr 2011 19:02:06 GMT
Author: norman
Date: Fri Apr  1 19:02:06 2011
New Revision: 1087851

URL: http://svn.apache.org/viewvc?rev=1087851&view=rev
Log:
Make sure we remove the heartbeat Runnable when a ImapSession was closed. See IMAP-275

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

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java?rev=1087851&r1=1087850&r2=1087851&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
(original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
Fri Apr  1 19:02:06 2011
@@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.james.imap.api.ImapCommand;
+import org.apache.james.imap.api.ImapSessionState;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.response.StatusResponse;
@@ -133,18 +134,29 @@ public class IdleProcessor extends Abstr
 
             // Check if we should send heartbeats
             if (heartbeatInterval > 0) {
-                ScheduledFuture<?> heartbeatFuture = heartbeatExecutor.scheduleWithFixedDelay(new
Runnable() {
+                final ScheduledFuture<?> heartbeatFuture = heartbeatExecutor.scheduleWithFixedDelay(new
Runnable() {
 
                     public void run() {
-                        // Send a heartbeat to the client to make sure we reset
-                        // the idle timeout. This is kind of the same workaround
-                        // as dovecot use.
-                        //
-                        // This is mostly needed because of the broken outlook
-                        // client, but can't harm for other clients too.
-                        // See IMAP-272
-                        StatusResponse response = getStatusResponseFactory().untaggedOk(HumanReadableText.HEARTBEAT);
-                        responder.respond(response);
+                        // check if we need to cancel the Runnable
+                        // See IMAP-275
+                        if (session.getState() == ImapSessionState.LOGOUT) {
+                            
+                            Object future = session.getAttribute(HEARTBEAT_FUTURE);
+                            if (future != null) {
+                                // cancel the future if needed to be sure it not run infinity
+                                ((ScheduledFuture<?>) future).cancel(true);
+                            }
+                        } else {
+                            // Send a heartbeat to the client to make sure we reset
+                            // the idle timeout. This is kind of the same workaround
+                            // as dovecot use.
+                            //
+                            // This is mostly needed because of the broken outlook
+                            // client, but can't harm for other clients too.
+                            // See IMAP-272
+                            StatusResponse response = getStatusResponseFactory().untaggedOk(HumanReadableText.HEARTBEAT);
+                            responder.respond(response);
+                        }
                     }
                 }, heartbeatInterval, heartbeatInterval, heartbeatIntervalUnit);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message