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 km...@apache.org on 2008/08/01 14:21:21 UTC

svn commit: r681670 - in /db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services: daemon/SingleThreadDaemonFactory.java monitor/BaseMonitor.java

Author: kmarsden
Date: Fri Aug  1 05:21:21 2008
New Revision: 681670

URL: http://svn.apache.org/viewvc?rev=681670&view=rev
Log:
DERBY-3803 org.apache.derbyTesting.functionTests.tests.lang.XMLTypeAndOpsTest' failures on JVM 1.5 on trunk, 10.4 and 10.3


Modified:
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/daemon/SingleThreadDaemonFactory.java
    db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/daemon/SingleThreadDaemonFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/daemon/SingleThreadDaemonFactory.java?rev=681670&r1=681669&r2=681670&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/daemon/SingleThreadDaemonFactory.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/daemon/SingleThreadDaemonFactory.java Fri Aug  1 05:21:21 2008
@@ -26,6 +26,7 @@
 import org.apache.derby.iapi.services.daemon.DaemonService;
 import org.apache.derby.impl.services.daemon.BasicDaemon;
 import org.apache.derby.iapi.services.monitor.Monitor;
+import org.apache.derby.iapi.util.PrivilegedThreadOps;
 
 public class SingleThreadDaemonFactory implements DaemonFactory
 {
@@ -46,6 +47,12 @@
 		BasicDaemon daemon = new BasicDaemon(contextService);
 
 		Thread daemonThread = Monitor.getMonitor().getDaemonThread(daemon, name, false);
+		// DERBY-3745.  setContextClassLoader for thread to null to avoid
+		// leaking class loaders.
+		PrivilegedThreadOps.setContextClassLoaderIfPrivileged(
+							  daemonThread, null);
+
+
 		daemonThread.start();
 		return daemon;
 	}

Modified: db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java?rev=681670&r1=681669&r2=681670&view=diff
==============================================================================
--- db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java (original)
+++ db/derby/code/branches/10.4/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java Fri Aug  1 05:21:21 2008
@@ -276,6 +276,11 @@
 		dontGC = new AntiGC(keepItems);
 
 		Thread dontGCthread = getDaemonThread(dontGC, "antiGC", true);
+		// DERBY-3745.  setContextClassLoader for thread to null to avoid
+		// leaking class loaders.
+		PrivilegedThreadOps.setContextClassLoaderIfPrivileged(
+						dontGCthread, null);
+
 		dontGCthread.start();
 
 		if (SanityManager.DEBUG) {
@@ -2079,28 +2084,7 @@
 	}
 
 	public Thread getDaemonThread(Runnable task, String name, boolean setMinPriority) {
-		// DERBY-3745 We want to avoid the thread leaking class loaders,
-		// so we make the context class loader null before we create the
-		// thread.
-		ClassLoader savecl = null;
-		boolean hasGetClassLoaderPerms = false;
-		try {
-			savecl = PrivilegedThreadOps.getContextClassLoader(Thread.currentThread());
-			hasGetClassLoaderPerms = true;
-		}  catch (SecurityException se) {
-			// ignore security exception. Earlier versions of Derby, before
-			// the DERBY-3745 fix did not require getClassLoader permissions.
-			// We may leak class loaders if we are not able to get the 
-			// class loader, but we cannot just fail.
-		}
-		if (hasGetClassLoaderPerms)
-			PrivilegedThreadOps.setContextClassLoaderIfPrivileged(
-								 Thread.currentThread(), null);
 		Thread t =  new Thread(daemonGroup, task, "derby.".concat(name));
-		if (hasGetClassLoaderPerms)
-			PrivilegedThreadOps.setContextClassLoaderIfPrivileged(
-							  Thread.currentThread(), savecl);
-
 		t.setDaemon(true);
 
 		if (setMinPriority) {