myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andy Schwartz (JIRA)" <>
Subject [jira] [Resolved] (TRINIDAD-2484) Threadsafety issue in SkinStyleProvider leading to missing styles and distorted ui
Date Mon, 23 Jun 2014 16:35:24 GMT


Andy Schwartz resolved TRINIDAD-2484.

       Resolution: Fixed
    Fix Version/s: 2.1.1-core
         Assignee: Andy Schwartz

Committed in r1604869.

Thanks for the fix, Prakash!

> Threadsafety issue in SkinStyleProvider leading to missing styles and distorted ui
> ----------------------------------------------------------------------------------
>                 Key: TRINIDAD-2484
>                 URL:
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>          Components: Skinning
>    Affects Versions: 2.1.0-core
>            Reporter: Prakash Udupa
>            Assignee: Andy Schwartz
>             Fix For: 2.1.1-core
>         Attachments: TRINIDAD-2484-trunk.patch
>   Original Estimate: 24h
>  Remaining Estimate: 24h
> We have seen that soon after server start, when there are almost concurrent requests
from IE, in random occurrences, there will be only one link encoded in the HTML, while there
are two css files generated. Consequently, styles for some components in the page could go
missing, ending up in distorted UI in certain sections of the rendered page.
> We suspect the cause to be a thread safety issue in SkinStyleProvider implementation
where we construct style providers and save it in map keyed by skin and the directory path
of the css. The issue is in _getProviders() implementation, where the variable _sSharedProviders
is not accessed in threadsafe manner. This leads to possibility of the providers map being
overwritten. This further leads to constructing two SkinStyleProviders for the same skin.
While one request could use one provider (P1) that is in process of writing out one css file
with the second one pending, there could be other request that ends up using a different provider
(P2) that would see a single file written, and end up adding single URI in its Entry map.
All requests later could end up using P2 and sufferring from only one link being rendered,
while there are two stylesheets actually generated.
> Proposed fix is to eliminate "_sSharedProviders", and instead use the application scoped
concurrent map hanging off of request scope to store the provider map. We can then leverage
on the putIfAbsent in there to ensure there is only one copy of providers map for an application.

This message was sent by Atlassian JIRA

View raw message