This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.webdav-2.1.2 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-webdav.git
commit f90cc4b3c8fce7210613f0a6b89425726f9a39eb Author: Justin Edelson <[email protected]> AuthorDate: Mon Aug 13 18:32:45 2012 +0000 SLING-2559 - avoiding the setValue() call by queueing updates to the handler map and then using putAll() git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/webdav@1372539 13f79535-47bb-0310-9956-ffa450edef68 --- .../jcr/webdav/impl/handler/SlingHandlerManager.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingHandlerManager.java b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingHandlerManager.java index 356eb81..6660095 100644 --- a/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingHandlerManager.java +++ b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingHandlerManager.java @@ -19,6 +19,8 @@ package org.apache.sling.jcr.webdav.impl.handler; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; @@ -58,19 +60,31 @@ public class SlingHandlerManager<ManagedType> { final ArrayList<ManagedType> ioHandlers = new ArrayList<ManagedType>( entries.size()); + final Map<ServiceReference, ManagedType> updates = new HashMap<ServiceReference, ManagedType>(); for (Entry<ServiceReference, ManagedType> entry : entries) { final ManagedType ioHandler; if (entry.getValue() == null) { + final ServiceReference key = entry.getKey(); // unckecked cast ioHandler = (ManagedType) this.componentContext.locateService( - referenceName, entry.getKey()); - entry.setValue(ioHandler); + referenceName, key); + // since we're inside the entries iterator, we can't update the map + // defer updating the map until this loop is finished + if (ioHandler != null) { + updates.put(key, ioHandler); + } } else { ioHandler = entry.getValue(); } ioHandlers.add(ioHandler); } + if (!updates.isEmpty()) { + synchronized (this.handlerServices) { + this.handlerServices.putAll(updates); + } + } + // unckecked cast this.handlers = ioHandlers.toArray(type); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
