Eddie, Daryl, Hey, there's a thread deadlock problem in the interaction between the NetUI DeferredSessionStorageHandler (DSSH) and a page flow that uses the NameService (either in an action calling the NameService.instance() or rendering a JSP with the netui:tree tag using the XHR support.
The problem occurs when two concurrent threads get the locks on the session mutex object and page flow controller in reverse order. It can occur in the following way: Thread A, Step 1 - PageFlowRequestProcessor.process() completes the execute of the action and calls DSSH.applyChanges(). Thread A, Step 2 - DSSH.applyChanges() gets a lock on the session mutex object. Thread B, Step 1 - PFRP.process() starts the process to execute the action of a page flow. Thread B, Step 2 - FlowController.execute() gets a lock on the page flow controller object. Thread A, Step 3 - DSSH.applyChanges() tries to get lock on page flow controller object (to apply changes from the request to the session)... and waits. Thread B, Step 3 - The PageFlow action calls NameService.instance() which in turn tries to get a lock on the session mutex object (to ensure that only a single NameService object is created within a specific user session)... and waits. ...in a deadlock now. I was wondering if there was another way we could get the NameService instance in the session such that we did not need the session mutex object. Maybe we create and add it within HttpSessionMutexListener.sessionCreated() or create another listener? Other ideas? Thanks, Carlin
