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 dj...@apache.org on 2006/03/20 18:53:11 UTC
svn commit: r387264 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/services/context/ContextService.java
impl/services/monitor/BaseMonitor.java
Author: djd
Date: Mon Mar 20 09:53:09 2006
New Revision: 387264
URL: http://svn.apache.org/viewcvs?rev=387264&view=rev
Log:
DERBY-1095 Cleanup ContextManagers created during database boot.
Add some comments and synchronization to ContextService.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/context/ContextService.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/context/ContextService.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/context/ContextService.java?rev=387264&r1=387263&r2=387264&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/context/ContextService.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/context/ContextService.java Mon Mar 20 09:53:09 2006
@@ -158,9 +158,22 @@
*/
private ThreadLocal threadContextList = new ThreadLocal();
+ /**
+ * Collection of all ContextManagers that are open
+ * in the complete Derby system. A ContextManager is
+ * added when it is created with newContextManager and
+ * removed when the session is closed.
+ *
+ * @see #newContextManager()
+ * @see SystemContext#cleanupOnError(Throwable)
+ */
private HashSet allContexts;
- // don't want any instances
+ /**
+ * Create a new ContextService for a Derby system.
+ * Only a single system is active at any time.
+ *
+ */
public ContextService() {
// find the error stream
@@ -179,10 +192,14 @@
// For some unknown reason, the ContextManager and
// ContextService objects will not be garbage collected
// without the next two lines.
- factory.allContexts = null;
- factory.threadContextList = null;
-
- ContextService.factory = null;
+ ContextService fact = ContextService.factory;
+ if (fact != null) {
+ synchronized (fact) {
+ fact.allContexts = null;
+ fact.threadContextList = null;
+ ContextService.factory = null;
+ }
+ }
}
public static ContextService getFactory() {
@@ -495,7 +512,7 @@
synchronized (this) {
allContexts.add(cm);
-
+
if (SanityManager.DEBUG) {
if (SanityManager.DEBUG_ON("memoryLeakTrace")) {
@@ -531,8 +548,13 @@
}
}
- synchronized void removeContext( ContextManager cm)
+ /**
+ * Remove a ContextManager from the list of all active
+ * contexts managers.
+ */
+ synchronized void removeContext(ContextManager cm)
{
- allContexts.remove( cm);
+ if (allContexts != null)
+ allContexts.remove( cm);
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java?rev=387264&r1=387263&r2=387264&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java Mon Mar 20 09:53:09 2006
@@ -1836,7 +1836,10 @@
BaseMonitor.removeRuntimeProperties(properties), false);
usProperties.setServiceBooted();
}
-
+
+ if (cm != previousCM)
+ cm.cleanupOnError(StandardException.closeException());
+
} catch (Throwable t) {
// ensure that the severity will shutdown the service