diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/com/vaadin/server/VaadinSession.java | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/server/src/com/vaadin/server/VaadinSession.java b/server/src/com/vaadin/server/VaadinSession.java index 8de01e22bc..1f7a577a42 100644 --- a/server/src/com/vaadin/server/VaadinSession.java +++ b/server/src/com/vaadin/server/VaadinSession.java @@ -903,12 +903,14 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable { */ public void unlock() { assert hasLock(); + boolean ultimateRelease = false; try { /* * Run pending tasks and push if the reentrant lock will actually be * released by this unlock() invocation. */ if (((ReentrantLock) getLockInstance()).getHoldCount() == 1) { + ultimateRelease = true; getService().runPendingAccessTasks(this); for (UI ui : getUIs()) { @@ -935,7 +937,7 @@ public class VaadinSession implements HttpSessionBindingListener, Serializable { * actually released. This means that the queue should be purged again * if it is not empty after unlocking. */ - if (!getPendingAccessQueue().isEmpty()) { + if (ultimateRelease && !getPendingAccessQueue().isEmpty()) { getService().ensureAccessQueuePurged(this); } } |