Return-Path: X-Original-To: apmail-brooklyn-dev-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1F71118D96 for ; Mon, 25 May 2015 08:27:17 +0000 (UTC) Received: (qmail 59812 invoked by uid 500); 25 May 2015 08:27:07 -0000 Delivered-To: apmail-brooklyn-dev-archive@brooklyn.apache.org Received: (qmail 59776 invoked by uid 500); 25 May 2015 08:27:07 -0000 Mailing-List: contact dev-help@brooklyn.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.incubator.apache.org Delivered-To: mailing list dev@brooklyn.incubator.apache.org Received: (qmail 59765 invoked by uid 99); 25 May 2015 08:27:07 -0000 Received: from Unknown (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 May 2015 08:27:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id D2704C836B for ; Mon, 25 May 2015 08:27:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.991 X-Spam-Level: X-Spam-Status: No, score=0.991 tagged_above=-999 required=6.31 tests=[KAM_LAZY_DOMAIN_SECURITY=1, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-eu-west.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id tw3U9ASf-vdv for ; Mon, 25 May 2015 08:26:59 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-eu-west.apache.org (ASF Mail Server at mx1-eu-west.apache.org) with SMTP id 4355621116 for ; Mon, 25 May 2015 08:26:58 +0000 (UTC) Received: (qmail 59707 invoked by uid 99); 25 May 2015 08:26:57 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 May 2015 08:26:57 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 49C0BDFAF3; Mon, 25 May 2015 08:26:57 +0000 (UTC) From: ahgittin To: dev@brooklyn.incubator.apache.org Reply-To: dev@brooklyn.incubator.apache.org References: In-Reply-To: Subject: [GitHub] incubator-brooklyn pull request: CLI commands for manipulating cat... Content-Type: text/plain Message-Id: <20150525082657.49C0BDFAF3@git1-us-west.apache.org> Date: Mon, 25 May 2015 08:26:57 +0000 (UTC) Github user ahgittin commented on a diff in the pull request: https://github.com/apache/incubator-brooklyn/pull/617#discussion_r30968526 --- Diff: utils/common/src/main/java/brooklyn/util/javalang/AggregateClassLoader.java --- @@ -57,24 +61,65 @@ public static AggregateClassLoader newInstanceWithNoLoaders() { /** Add a loader to the first position in the search path. */ public void addFirst(ClassLoader classLoader) { - if (classLoader != null) classLoaders.add(0, classLoader); + if (classLoader != null) { + synchronized (classLoaders) { + classLoaders.add(0, classLoader); + } + } } /** Add a loader to the last position in the search path. */ public void addLast(ClassLoader classLoader) { - if (classLoader != null) classLoaders.add(classLoader); + if (classLoader != null) { + synchronized (classLoaders) { + classLoaders.add(classLoader); + } + } } /** Add a loader to the specific position in the search path. * (It is callers responsibility to ensure that position is valid.) */ public void add(int index, ClassLoader classLoader) { - if (classLoader != null) classLoaders.add(index, classLoader); + if (classLoader != null) { + synchronized (classLoaders) { + classLoaders.add(index, classLoader); + } + } + } + + /** Resets the classloader shown here to be the given set */ + public void reset(Collection newClassLoaders) { + synchronized (classLoaders) { + // synchronize: + // * to prevent concurrent invocations + // * so add(0, cl) doesn't interfere + // * and for good measure we add before removing so that iterator always contains everything + // although since iterator access is synchronized that shouldn't be necessary + int count = classLoaders.size(); + classLoaders.addAll(newClassLoaders); + for (int i=0; i getList() { return classLoaders; } + public Iterator iterator() { + synchronized (classLoaders) { + // provides iterator of snapshot + return classLoaders.iterator(); --- End diff -- semantics of `CopyOnWriteList.iterator()` is to take a snapshot, with unmodifiable iterator; have expanded comment --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---