You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Robin Shine (JIRA)" <ji...@apache.org> on 2011/09/19 07:54:09 UTC
[jira] [Commented] (WICKET-4063) Theading issue in
AsynchronousDataStore causes OutOfMemory exception
[ https://issues.apache.org/jira/browse/WICKET-4063?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13107638#comment-13107638 ]
Robin Shine commented on WICKET-4063:
-------------------------------------
Modifying "storeData" method like below seems to fix this issue:
Entry entry = new Entry(sessionId, id, data);
String key = getKey(entry);
entryMap.put(key, entry);
try
{
boolean added = entries.offer(entry, OFFER_WAIT, TimeUnit.MILLISECONDS);
if (added == false)
{
log.debug("Storing synchronously page with id '{}' in session '{}'", id, sessionId);
entryMap.remove(key);
dataStore.storeData(sessionId, id, data);
}
}
catch (InterruptedException e)
{
log.error(e.getMessage(), e);
entryMap.remove(key);
dataStore.storeData(sessionId, id, data);
}
> Theading issue in AsynchronousDataStore causes OutOfMemory exception
> --------------------------------------------------------------------
>
> Key: WICKET-4063
> URL: https://issues.apache.org/jira/browse/WICKET-4063
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.5.0
> Reporter: Robin Shine
> Priority: Critical
>
> Considering below time sequence:
> 1. "entries.offer" is called during "storeData".
> 2. page saving thread comes in, and poll the entry. Then "entryMap.remove" is called. Nothing will be removed since entry has not been added to entryMap yet.
> 3. "entryMap.put" is called during "storeData".
> The result is that entries in "entryMap" may never be removed, and the entryMap can increase infinitely.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira