Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 44058 invoked from network); 30 Aug 2006 14:45:39 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 30 Aug 2006 14:45:38 -0000 Received: (qmail 59378 invoked by uid 500); 30 Aug 2006 14:45:37 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 59300 invoked by uid 500); 30 Aug 2006 14:45:37 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 59228 invoked by uid 99); 30 Aug 2006 14:45:36 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Aug 2006 07:45:36 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Aug 2006 07:45:35 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id C86F21A981A; Wed, 30 Aug 2006 07:45:14 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r438504 - /jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/TransientFileFactory.java Date: Wed, 30 Aug 2006 14:45:14 -0000 To: commits@jackrabbit.apache.org From: stefan@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060830144514.C86F21A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: stefan Date: Wed Aug 30 07:45:14 2006 New Revision: 438504 URL: http://svn.apache.org/viewvc?rev=438504&view=rev Log: JCR-549: TransientFileFactory may throw ConcurrentModificationException on shutdown Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/TransientFileFactory.java Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/TransientFileFactory.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/TransientFileFactory.java?rev=438504&r1=438503&r2=438504&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/TransientFileFactory.java (original) +++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/TransientFileFactory.java Wed Aug 30 07:45:14 2006 @@ -82,9 +82,15 @@ // register shutdownhook for final cleaning up Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { - for (Iterator it = trackedRefs.iterator(); it.hasNext();) { - MoribundFileReference fileRef = (MoribundFileReference) it.next(); - fileRef.delete(); + // synchronize on the list before iterating over it in order + // to avoid ConcurrentModificationException (JCR-549) + // @see java.lang.util.Collections.synchronizedList(java.util.List) + synchronized(trackedRefs) { + for (Iterator it = trackedRefs.iterator(); it.hasNext();) { + MoribundFileReference fileRef = (MoribundFileReference) it.next(); + fileRef.delete(); + } + } } });