X-Git-Url: http://git.megacz.com/?p=org.ibex.jinetd.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjinetd%2FTreeClassLoader.java;fp=src%2Forg%2Fibex%2Fjinetd%2FTreeClassLoader.java;h=d7b4f5e0655ebb662c188f1329decd7987b39bf5;hp=e9f901feaa6d187896af6a19f8a3cfb626184708;hb=501b9089d3cf777fc417d9bcddba9bc542a086f9;hpb=583587a3f34a3d2939bcc2b7bcab51b871f2b0c7 diff --git a/src/org/ibex/jinetd/TreeClassLoader.java b/src/org/ibex/jinetd/TreeClassLoader.java index e9f901f..d7b4f5e 100644 --- a/src/org/ibex/jinetd/TreeClassLoader.java +++ b/src/org/ibex/jinetd/TreeClassLoader.java @@ -23,6 +23,8 @@ public class TreeClassLoader extends URLClassLoader { this.lib = new File(root.getAbsolutePath() + File.separatorChar + "lib"); } + public Enumeration getLoadedClassNames() { return cache.keys(); } + // Classloading ////////////////////////////////////////////////////////////////////////////// public URL[] getURLs() { @@ -112,4 +114,32 @@ public class TreeClassLoader extends URLClassLoader { return null; } + // Experimental ////////////////////////////////////////////////////////////////////////////// + + protected ThreadGroup tg = null; + private void nuke() { + if (tg.activeCount() == 0) return; + Log.info(this, "killing all threads for: " + root.getAbsolutePath()); + Log.info(this, " thread count before interrupt: " + tg.activeCount()); + tg.interrupt(); + try { Thread.sleep(3000); } catch (Exception e) { Log.error(this, e); } + Log.info(this, " thread count before kill: " + tg.activeCount()); + Thread[] all = new Thread[tg.activeCount()]; + tg.enumerate(all, true); + for(int i=0; i 0) { + Log.warn(this, " annoying threads:"); + Thread[] annoying = new Thread[tg.activeCount()]; + tg.enumerate(annoying, true); + for(int i=0; i