You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Don Brown (JIRA)" <ji...@apache.org> on 2008/06/13 03:28:05 UTC

[jira] Updated: (WW-2507) I18nInterceptor's intercept method is not thread safe

     [ https://issues.apache.org/struts/browse/WW-2507?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Don Brown updated WW-2507:
--------------------------

    Fix Version/s: 2.1.3

> 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
>             Fix For: 2.1.3
>
>
> 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.