I18nInterceptor's intercept method is not thread safe
-----------------------------------------------------
Key: WW-2507
URL: https://issues.apache.org/struts/browse/WW-2507
Project: Struts 2
Issue Type: Bug
Components: Core Interceptors
Affects Versions: 2.0.11
Reporter: Bob Tiernay
Assignee: Don Brown
The following excerpt from I18nInterceptor's intercept method is not thread
safe:
//save it in session
Map session = invocation.getInvocationContext().getSession(); <---
start of atomic operation
if (session != null) {
if (requested_locale != null) {
Locale locale = (requested_locale instanceof Locale) ?
(Locale) requested_locale :
LocalizedTextUtil.localeFromString(requested_locale.toString(), null);
if (log.isDebugEnabled()) {
log.debug("store locale=" + locale);
}
if (locale != null) {
session.put(attributeName, locale);
}
}
//set locale for action
Object locale = session.get(attributeName); <--- session may no
longer exist due to concurrecy.
if (locale != null && locale instanceof Locale) {
if (log.isDebugEnabled()) {
log.debug("apply locale=" + locale);
}
saveLocale(invocation, (Locale)locale);
}
}
Between the calls of:
1. Map session = invocation.getInvocationContext().getSession(); , and
2. Object locale = session.get(attributeName);
the session may have been invalidated. In my particular application, this was
indeed the case. This causes an invalid session exception to be raised.
The recommended handling would be to synchronize this portion of the method.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.