Fixed DirServer shutdown bug.
[jsvc.git] / src / dolda / jsvc / scgi / DirServer.java
index 7bf064d..8f19d8a 100644 (file)
@@ -3,32 +3,37 @@ package dolda.jsvc.scgi;
 import java.io.*;
 import java.net.*;
 import java.util.*;
+import java.util.logging.*;
 import dolda.jsvc.*;
 import dolda.jsvc.util.*;
 import dolda.jsvc.j2ee.PosixArgs;
 
 public class DirServer extends Server {
     private final Map<File, DSContext> contexts = new HashMap<File, DSContext>();
-    private final File datroot;
+    private final Environment env;
+    private final Logger logger = Logger.getLogger("dolda.jsvc.scgi.dirserver");
     
-    public DirServer(ServerSocket sk, File datroot) {
+    public DirServer(ServerSocket sk, Environment env) {
        super(sk);
-       this.datroot = datroot;
+       this.env = env;
     }
 
     private DSContext context(File file) throws ThreadContext.CreateException {
        synchronized(contexts) {
            DSContext ctx = contexts.get(file);
+           String act = "loaded %s as %s";
            if(ctx != null) {
                if(ctx.mtime < file.lastModified()) {
-                   ctx.tg.destroy();
+                   ctx.tg.shutdown();
                    contexts.remove(file);
                    ctx = null;
+                   act = "reloaded %s as %s";
                }
            }
            if(ctx == null) {
-               ctx = new DSContext(file, datroot);
+               ctx = new DSContext(file, env);
                contexts.put(file, ctx);
+               logger.config(String.format(act, file, ctx.name()));
            }
            return(ctx);
        }
@@ -80,11 +85,8 @@ public class DirServer extends Server {
            usage(System.err);
            System.exit(1);
        }
-       if(datroot == null) {
-           datroot = new File(System.getProperty("user.home"), ".jsvc");
-           if(!datroot.exists() || !datroot.isDirectory())
-               datroot = null;
-       }
+       Environment env = (datroot == null)?new Environment():new Environment(datroot);
+       env.initvm();
        int port = Integer.parseInt(opt.rest[0]);
        ServerSocket sk;
        try {
@@ -94,7 +96,7 @@ public class DirServer extends Server {
            System.exit(1);
            return; /* Because javac is stupid. :-/ */
        }
-       DirServer s = new DirServer(sk, datroot);
+       DirServer s = new DirServer(sk, env);
        if(charset != null)
            s.headcs = charset;