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