[
https://issues.apache.org/jira/browse/TRINIDAD-2484?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
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: https://issues.apache.org/jira/browse/TRINIDAD-2484
> 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
(v6.2#6252)