diff options
-rw-r--r-- | client/src/com/vaadin/client/ApplicationConnection.java | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java index 93a2e90c07..375beb9dda 100644 --- a/client/src/com/vaadin/client/ApplicationConnection.java +++ b/client/src/com/vaadin/client/ApplicationConnection.java @@ -3287,6 +3287,14 @@ public class ApplicationConnection { Timer forceHandleMessage = new Timer() { @Override public void run() { + if (responseHandlingLocks.isEmpty()) { + /* + * Timer fired but there's nothing to clear. This can happen + * with IE8 as Timer.cancel is not always effective (see GWT + * issue 8101). + */ + return; + } VConsole.log("WARNING: reponse handling was never resumed, forcibly removing locks..."); responseHandlingLocks.clear(); handlePendingMessages(); @@ -3311,9 +3319,13 @@ public class ApplicationConnection { public void resumeResponseHandling(Object lock) { responseHandlingLocks.remove(lock); if (responseHandlingLocks.isEmpty()) { - VConsole.log("No more response handling locks, handling pending requests."); + // Cancel timer that breaks the lock forceHandleMessage.cancel(); - handlePendingMessages(); + + if (!pendingUIDLMessages.isEmpty()) { + VConsole.log("No more response handling locks, handling pending requests."); + handlePendingMessages(); + } } } |