Details
-
Type: Task
-
Status: Open
-
Priority: Major
-
Resolution: Unresolved
-
Affects Version/s: EE-2.0.0.GA
-
Fix Version/s: None
-
Component/s: ICE-Components
-
Labels:None
-
Environment:ICEfaces-EE
Description
Livelock is sometimes observed with the following stack trace common:
com.icesoft.faces.component.panelseries.UISeries.restoreChild(UISeries.java:535)
com.icesoft.faces.component.panelseries.UISeries.restoreChildState(UISeries.java:473)
com.icesoft.faces.component.panelseries.UISeries.restoreChildState(UISeries.java:476)
com.icesoft.faces.component.panelseries.UISeries.restoreChildState(UISeries.java:476)
com.icesoft.faces.component.panelseries.UISeries.restoreChildState(UISeries.java:476)
com.icesoft.faces.component.panelseries.UISeries.restoreChildState(UISeries.java:476)
com.icesoft.faces.component.panelseries.UISeries.restoreChildState(UISeries.java:476)
com.icesoft.faces.component.panelseries.UISeries.restoreChildrenState(UISeries.java:461)
com.icesoft.faces.component.panelseries.UISeries.setRowIndex(UISeries.java:137)
com.icesoft.faces.component.panelseries.UISeries.visitTree(UISeries.java:803)
javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
javax.faces.component.UIForm.visitTree(UIForm.java:344)
javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:280)
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:257)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
A patch will be created to make use of a ConcurrentHashMap. This is not to be regarded as a general solution since the root cause is concurrent access to the component tree which will likely cause other data corruption which may or may not be visible.
The patch will also log the state of the boolean sendDisposeWindow, since this is believed to be the only scenario for concurrent access (a window dispose sent at the same time as a user event being processed).