X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fibex%2Fjinetd%2FLoader.java;h=96093bd5e35621476b634f826f99ea6bae462014;hb=99f8fd894be14226a64f1889657edf863edf8afb;hp=b166df654bc76bbb1c3f50276fc87a314cc929f3;hpb=ac27342830d303ba1043db68f295875fe3a1ef4d;p=org.ibex.jinetd.git diff --git a/src/org/ibex/jinetd/Loader.java b/src/org/ibex/jinetd/Loader.java index b166df6..96093bd 100644 --- a/src/org/ibex/jinetd/Loader.java +++ b/src/org/ibex/jinetd/Loader.java @@ -11,10 +11,14 @@ public class Loader extends Watcher { ClassLoader parentClassLoader = null; static final ClassLoader mycl = Loader.class.getClassLoader(); + + protected ThreadGroup tg = new ThreadGroup(getAbsolutePath()); + public Loader(String path) { super(path); } //public Loader(String path, ClassLoader pcl) { super(path); this.parentClassLoader = pcl; } private TreeClassLoader classloader = null; + public synchronized void scan() throws IOException { super.scan(); } public synchronized ClassLoader getClassLoader() { ClassLoader classloader = this.classloader; if (classloader == null) { @@ -28,7 +32,6 @@ public class Loader extends Watcher { if (us.endsWith(".jar")) us = "file:"+us; else us = "file:"+us+"/"; urls[i] = new URL(us); - Log.warn("[classpath]", urls[i].toString()); } } catch (MalformedURLException e) { Log.error(this, e); @@ -52,6 +55,7 @@ public class Loader extends Watcher { } } + public String getClassPath() { String classpath = System.getProperty("java.class.path"); String [] l = new File(Root.root + "/LIB/").list(); @@ -122,7 +126,7 @@ public class Loader extends Watcher { String[] all = new String[args.size()]; args.copyInto(all); Log.info(this, "invoking javac for " + srcdir.getAbsolutePath()); - final Process javac = Runtime.getRuntime().exec(all); + final Process javac = Runtime.getRuntime().exec(all, new String[] { "PATH=/bin:/usr/bin" }); final BufferedReader out = new BufferedReader(new InputStreamReader(javac.getInputStream())); final BufferedReader err = new BufferedReader(new InputStreamReader(javac.getErrorStream())); new Thread() { public void run() { @@ -147,6 +151,12 @@ public class Loader extends Watcher { public void changed(Watched w) { if (w.path.indexOf("BIN") != -1) return; if (classloader != null) { + Log.info(this, "killing all threads for: " + w.path); + Log.info(this, " thread count before kill: " + tg.activeCount()); + tg.interrupt(); + try { Thread.sleep(1000); } catch (Exception e) { } + Log.info(this, " thread count after kill: " + tg.activeCount()); + tg = new ThreadGroup(getAbsolutePath()); Log.info(this, "scheduling classes for reload due to change in: " + w.path); classloader = null; }