Vojtech Szocs has posted comments on this change.

Change subject: userportal,webadmin: update branding manager
......................................................................


Patch Set 5: (2 inline comments)

....................................................
File 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/branding/BrandingManager.java
Line 80:     /**
Line 81:      * Get an instance of the {@code BrandingManager} with the default 
ETC_DIR.
Line 82:      * @return A {@code BrandingManager}
Line 83:      */
Line 84:     public static synchronized BrandingManager getInstance() {
In my last comment, I referred to you saying "I thought that declaring the 
instance as volatile solve this" + you posting code snippet that doesn't use 
synchronized keyword.

Juan's example is problematic due to follwing line:
instance = new DirectoryManager();

This line will do following 3 operations:
- 1. allocate memory
- 2. set "instance" reference to point to memory allocated in step 1.
- 3. call constructor

So even it's a single-line statement, there are 3 things happening behind the 
scene. If thread A does step 1 + 2 and gets suspended, thread B thinks "hey 
instance is not null I can use it" - even though constructor hasn't been called 
yet.

Again, I *strongly* suggest to read the above mentioned article on 
double-checked locking pitfalls in Java, instead of discussing it here.
Line 85:         if (instance == null) {
Line 86:             instance = new BrandingManager();
Line 87:         }
Line 88:         return instance;


Line 164:      * @param prefix The prefix to use for getting the keys.
Line 165:      * @param locale The locale to get the messages for.
Line 166:      * @return A {@code Map} of keys and values.
Line 167:      */
Line 168:     private Map<String, String> getMessageMap(final String prefix, 
final Locale locale) {
Please beware that Pair isn't well-designed for immutability to be used as 
cache key. I'd suggest to do caching in a separate patch.
Line 169:         List<BrandingTheme> messageThemes = getBrandingThemes();
Line 170:         // We need this map to remove potential duplicate strings 
from the resource bundles.
Line 171:         Map<String, String> keyValues = new HashMap<String, String>();
Line 172:         if (messageThemes != null) {


-- 
To view, visit http://gerrit.ovirt.org/15579
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I87f5a6684701c9d5f603bf79459a3a5b6614b24f
Gerrit-PatchSet: 5
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <aw...@redhat.com>
Gerrit-Reviewer: Alexander Wels <aw...@redhat.com>
Gerrit-Reviewer: Alon Bar-Lev <alo...@redhat.com>
Gerrit-Reviewer: Einav Cohen <eco...@redhat.com>
Gerrit-Reviewer: Greg Sheremeta <gsher...@redhat.com>
Gerrit-Reviewer: Michael Pasternak <mpast...@redhat.com>
Gerrit-Reviewer: Vojtech Szocs <vsz...@redhat.com>
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to