Github user bitstorm commented on the issue:

    https://github.com/apache/wicket/pull/233
  
    I agree about the use of a normal boolean, but I'm not sure I've understood 
your idea about ThreadLocal. What I would like to do is to prevent race 
conditions inside storeTouchedPages. I would do it using synchronized on entry 
object:
    
    ```
    protected void storeTouchedPages(final List<IManageablePage> touchedPages)
    {
        if (!touchedPages.isEmpty())
        {
                SessionEntry entry = getSessionEntry(true);
                synchronized (entry) 
                {
                        entry.setSessionCache(touchedPages);
                        for (IManageablePage page : touchedPages) 
                        {
                                // WICKET-5103 use the same sessionId as used 
in SessionEntry#getPage()
                                pageStore.storePage(entry.sessionId, page);
                        }
                        entry.updating.set(true);
                        setSessionAttribute(getAttributeName(), entry);
                }
        }
    }
    ```
    In this way two possible concurrent requests for the same session would 
execute storeTouchedPages one at a time.


---

Reply via email to