From 2ff71f623495995e83c71227630140f6609a13c4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Fri, 2 Aug 2013 16:03:15 +0300 Subject: [PATCH] Avoid infinite recursion when purging access queue (#12310) Change-Id: Id5029f6606ce508c5746af4e0fa3078283f511bf --- server/src/com/vaadin/server/VaadinSession.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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); } } -- 2.39.5