Prakash Udupa created TRINIDAD-2484:
---------------------------------------

             Summary: 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



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)

Reply via email to