You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2009/06/28 16:44:31 UTC
svn commit: r789103 - in /db/derby/code/branches/10.5: ./
java/engine/org/apache/derby/impl/services/monitor/
java/testing/org/apache/derbyTesting/functionTests/tests/engine/
Author: kahatlen
Date: Sun Jun 28 14:44:31 2009
New Revision: 789103
URL: http://svn.apache.org/viewvc?rev=789103&view=rev
Log:
DERBY-2074: NullPointerException when two threads load sort factory concurrently
Merged fix from trunk (revision 788670).
Added:
db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/ModuleLoadingTest.java
- copied unchanged from r788670, db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/engine/ModuleLoadingTest.java
Modified:
db/derby/code/branches/10.5/ (props changed)
db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java
db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/TopService.java
db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java
Propchange: db/derby/code/branches/10.5/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Jun 28 14:44:31 2009
@@ -1 +1 @@
-/db/derby/code/trunk:772090,772449,772534,774281,779681,782991,785163,785570,785662,788369,788968
+/db/derby/code/trunk:772090,772449,772534,774281,779681,782991,785163,785570,785662,788369,788670,788968
Modified: db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java?rev=789103&r1=789102&r2=789103&view=diff
==============================================================================
--- db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java (original)
+++ db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/ModuleInstance.java Sun Jun 28 14:44:31 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.5/java/engine/org/apache/derby/impl/services/monitor/TopService.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/TopService.java?rev=789103&r1=789102&r2=789103&view=diff
==============================================================================
--- db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/TopService.java (original)
+++ db/derby/code/branches/10.5/java/engine/org/apache/derby/impl/services/monitor/TopService.java Sun Jun 28 14:44:31 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.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java?rev=789103&r1=789102&r2=789103&view=diff
==============================================================================
--- db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java (original)
+++ db/derby/code/branches/10.5/java/testing/org/apache/derbyTesting/functionTests/tests/engine/_Suite.java Sun Jun 28 14:44:31 2009
@@ -47,6 +47,7 @@
TestSuite suite = new TestSuite("engine");
suite.addTest(ErrorStreamTest.suite());
+ suite.addTest(ModuleLoadingTest.suite());
return suite;
}