Return-Path: Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: (qmail 38732 invoked from network); 24 Nov 2009 02:31:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 24 Nov 2009 02:31:45 -0000 Received: (qmail 8111 invoked by uid 500); 24 Nov 2009 02:31:45 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 8038 invoked by uid 500); 24 Nov 2009 02:31:44 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 8023 invoked by uid 99); 24 Nov 2009 02:31:44 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 24 Nov 2009 02:31:44 +0000 X-ASF-Spam-Status: No, hits=-2.6 required=5.0 tests=BAYES_00 X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 24 Nov 2009 02:31:41 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 8A2D623888C2; Tue, 24 Nov 2009 02:31:21 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r883574 - in /db/derby/code/branches/10.4/java: engine/org/apache/derby/impl/services/monitor/ testing/org/apache/derbyTesting/functionTests/tests/engine/ Date: Tue, 24 Nov 2009 02:31:10 -0000 To: derby-commits@db.apache.org From: kmarsden@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20091124023121.8A2D623888C2@eris.apache.org> Author: kmarsden Date: Tue Nov 24 02:30:52 2009 New Revision: 883574 URL: http://svn.apache.org/viewvc?rev=883574&view=rev Log: DERBY-2074 NullPointerException when two threads load sort factory concurrently Contributed by Knut Anders Hatlen (knut dot hatlen at sun dot com) merge 789103 from 10.5 branch Added: db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/engine/ModuleLoadingTest.java - copied unchanged from r789103, db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/ModuleLoadingTest.java Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/TopService.java db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java?rev=883574&r1=883573&r2=883574&view=diff ============================================================================== --- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java (original) +++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java Tue Nov 24 02:30:52 2009 @@ -56,6 +56,9 @@ */ protected Object service; + /** Flag that tells whether booting of the module has completed. */ + private boolean booted; + /* ** Constructor */ @@ -111,4 +114,20 @@ protected Object getInstance() { return instance; } + + /** + * Set a flag that indicates that booting of the module has completed. + */ + synchronized void setBooted() { + booted = true; + } + + /** + * Check whether booting of the module has completed. + * @return {@code true} if the module has been booted, or {@code false} + * otherwise + */ + synchronized boolean isBooted() { + return booted; + } } Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/TopService.java URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/TopService.java?rev=883574&r1=883573&r2=883574&view=diff ============================================================================== --- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/TopService.java (original) +++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/TopService.java Tue Nov 24 02:30:52 2009 @@ -255,6 +255,16 @@ for (int i = 0; i < moduleInstances.size(); i++) { ModuleInstance module = (ModuleInstance) moduleInstances.elementAt(i); + // DERBY-2074: The module has not been properly booted, so we + // cannot yet determine whether or not this is a module we can + // use. Assume that we cannot use it and continue looking. We + // may end up booting the module twice if the assumption + // doesn't hold, but we'll detect and resolve that later when + // we call addToProtocol(). + if (!module.isBooted()) { + continue; + } + if (!module.isTypeAndName((PersistentService) null, key.getFactoryInterface(), key.getIdentifier())) continue; @@ -294,6 +304,8 @@ throw se; } + module.setBooted(); + synchronized (this) { Modified: db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java?rev=883574&r1=883573&r2=883574&view=diff ============================================================================== --- db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java (original) +++ db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java Tue Nov 24 02:30:52 2009 @@ -47,6 +47,7 @@ TestSuite suite = new TestSuite("engine"); suite.addTest(ErrorStreamTest.suite()); + suite.addTest(ModuleLoadingTest.suite()); return suite; }