From 9420c6cb17db1bfc4e24923b68714cb4f6c440f4 Mon Sep 17 00:00:00 2001 From: mguessan Date: Sat, 14 Feb 2015 19:43:24 +0000 Subject: [PATCH] Fix #36 Endless loop when using IMAP IDLE feature with SSL sockets, replaced thread sleep with a short timeout on socket read git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@2334 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/imap/ImapConnection.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/java/davmail/imap/ImapConnection.java b/src/java/davmail/imap/ImapConnection.java index 5fcea96f..d0fd4ef7 100644 --- a/src/java/davmail/imap/ImapConnection.java +++ b/src/java/davmail/imap/ImapConnection.java @@ -520,8 +520,10 @@ public class ImapConnection extends AbstractConnection { // clear cache before going to idle mode currentFolder.clearCache(); DavGatewayTray.resetIcon(); + int originalTimeout = client.getSoTimeout(); try { int count = 0; + client.setSoTimeout(1000); while (in.available() == 0) { if (++count >= imapIdleDelay) { count = 0; @@ -530,8 +532,15 @@ public class ImapConnection extends AbstractConnection { handleRefresh(previousImapFlagMap, currentFolder.getImapFlagMap()); } } - // sleep 1 second - Thread.sleep(1000); + // wait for input 1 second + try { + byte[] byteBuffer = new byte[1]; + if (in.read(byteBuffer) > 0) { + in.unread(byteBuffer); + } + } catch (SocketTimeoutException e) { + // ignore, read timed out + } } // read DONE line line = readClient(); @@ -543,6 +552,8 @@ public class ImapConnection extends AbstractConnection { } catch (IOException e) { // client connection closed throw new SocketException(e.getMessage()); + } finally { + client.setSoTimeout(originalTimeout); } } else { sendClient(commandId + " NO no folder selected");