Dolda2000 GitWeb
/
jsvc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0de5137
)
Add a VM shutdown hook in DirServer to shut down contexts properly.
author
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 11 Sep 2010 19:23:39 +0000
(21:23 +0200)
committer
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 11 Sep 2010 19:23:39 +0000
(21:23 +0200)
src/dolda/jsvc/scgi/DirServer.java
patch
|
blob
|
blame
|
history
diff --git
a/src/dolda/jsvc/scgi/DirServer.java
b/src/dolda/jsvc/scgi/DirServer.java
index
d238504
..
1ac452c
100644
(file)
--- a/
src/dolda/jsvc/scgi/DirServer.java
+++ b/
src/dolda/jsvc/scgi/DirServer.java
@@
-12,6
+12,7
@@
public class DirServer extends Server {
private final Map<File, DSContext> contexts = new HashMap<File, DSContext>();
private final Environment env;
private final Logger logger = Logger.getLogger("dolda.jsvc.scgi.dirserver");
private final Map<File, DSContext> contexts = new HashMap<File, DSContext>();
private final Environment env;
private final Logger logger = Logger.getLogger("dolda.jsvc.scgi.dirserver");
+ private Thread sdhook = null, main = null;
public DirServer(ServerSocket sk, Environment env) {
super(sk);
public DirServer(ServerSocket sk, Environment env) {
super(sk);
@@
-52,7
+53,21
@@
public class DirServer extends Server {
w.start();
}
w.start();
}
+ private class ShutdownHandler extends Thread {
+ public void run() {
+ sdhook = null;
+ DirServer.this.stop();
+ try {
+ main.join();
+ } catch(InterruptedException e) {}
+ }
+ }
+
protected void shutdown() {
protected void shutdown() {
+ try {
+ if(sdhook != null)
+ Runtime.getRuntime().removeShutdownHook(sdhook);
+ } catch(Exception e) {}
synchronized(contexts) {
for(Iterator<Map.Entry<File, DSContext>> i = contexts.entrySet().iterator(); i.hasNext();) {
Map.Entry<File, DSContext> e = i.next();
synchronized(contexts) {
for(Iterator<Map.Entry<File, DSContext>> i = contexts.entrySet().iterator(); i.hasNext();) {
Map.Entry<File, DSContext> e = i.next();
@@
-61,6
+76,7
@@
public class DirServer extends Server {
ctx.tg.shutdown();
}
}
ctx.tg.shutdown();
}
}
+ super.shutdown();
}
private static void usage(PrintStream out) {
}
private static void usage(PrintStream out) {
@@
-111,6
+127,8
@@
public class DirServer extends Server {
if(charset != null)
s.headcs = charset;
if(charset != null)
s.headcs = charset;
- new Thread(s, "SCGI server thread").start();
+ Runtime.getRuntime().addShutdownHook(s.sdhook = s.new ShutdownHandler());
+ s.main = new Thread(s, "SCGI server thread");
+ s.main.start();
}
}
}
}