Mercurial Hosting > luan
changeset 1231:0b75337bb91a
better closing
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 05 Apr 2018 16:38:33 -0600 |
parents | 034f2a0b3915 |
children | 857eb648d4e5 |
files | src/luan/host/WebHandler.java src/luan/modules/http/LuanHandler.java |
diffstat | 2 files changed, 20 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
diff -r 034f2a0b3915 -r 0b75337bb91a src/luan/host/WebHandler.java --- a/src/luan/host/WebHandler.java Wed Apr 04 14:54:29 2018 -0600 +++ b/src/luan/host/WebHandler.java Thu Apr 05 16:38:33 2018 -0600 @@ -33,16 +33,20 @@ private static class LuanRef { private final LuanState luan; + private final Handler handler; + private final LuanHandler luanHandler; - private LuanRef(LuanState luan) { + private LuanRef(LuanState luan,Handler handler,LuanHandler luanHandler) { this.luan = luan; + this.handler = handler; + this.luanHandler = luanHandler; } } private static final ReferenceQueue<LuanRef> queue = new ReferenceQueue<LuanRef>(); private static class MyReference extends SoftReference<LuanRef> { - private final LuanState luan; + private LuanState luan; private MyReference(LuanRef lr) { super(lr,queue); @@ -57,6 +61,7 @@ return; logger.info("sweep"); ref.luan.close(); + ref.luan = null; } } @@ -65,9 +70,6 @@ private static final Map<String,MyReference> siteMap = new HashMap<String,MyReference>(); private static String sitesDir = null; - private static final String HANDLER = "WebHandler.handler"; - private static final String LUAN_HANDLER = "WebHandler.luanHandler"; - public static boolean isServing() { return sitesDir != null; } @@ -88,23 +90,17 @@ LuanRef lr = getSite(domain); if( lr == null ) return null; - LuanState luan = lr.luan; - Handler handler = (Handler)luan.registry().get(HANDLER); - return handler.handle(request); + return lr.handler.handle(request); } public static Object runLuan(String domain,String sourceText,String sourceName) throws LuanException { LuanRef lr = getSite(domain); - LuanState luan = lr.luan; - LuanHandler luanHandler = (LuanHandler)luan.registry().get(LUAN_HANDLER); - return luanHandler.runLuan(sourceText,sourceName); + return lr.luanHandler.runLuan(sourceText,sourceName); } public static Object callSite(String domain,String fnName,Object... args) throws LuanException { LuanRef lr = getSite(domain); - LuanState luan = lr.luan; - LuanHandler luanHandler = (LuanHandler)luan.registry().get(LUAN_HANDLER); - return luanHandler.call_rpc(fnName,args); + return lr.luanHandler.call_rpc(fnName,args); } private static LuanRef getSite(String domain) { @@ -119,8 +115,7 @@ if( !dir.exists() /* && !recover(dir) */ ) return null; sweep(); - LuanState luan = newSite(dir.toString(),domain); - lr = new LuanRef(luan); + lr = newSite(dir.toString(),domain); siteMap.put(domain,new MyReference(lr)); } return lr; @@ -165,7 +160,7 @@ return init; } - private static LuanState newSite(String dir,String domain) { + private static LuanRef newSite(String dir,String domain) { LuanState luan = new LuanState(); LuanTable init = initLuan(luan,dir,domain); @@ -180,10 +175,7 @@ String logDir = dir + "/site/private/local/logs/web"; new File(logDir).mkdirs(); - luan.registry().put(HANDLER,handler); - luan.registry().put(LUAN_HANDLER,luanHandler); - - return luan; + return new LuanRef(luan,handler,luanHandler); } public static void removeHandler(String domain) throws Exception { @@ -191,9 +183,7 @@ Reference<LuanRef> ref = siteMap.remove(domain); LuanRef lr = ref==null ? null : ref.get(); if( lr != null ) { - LuanState luan = lr.luan; - LuanHandler luanHandler = (LuanHandler)luan.registry().get(LUAN_HANDLER); - luanHandler.close(); + lr.luan.close(); } } }
diff -r 034f2a0b3915 -r 0b75337bb91a src/luan/modules/http/LuanHandler.java --- a/src/luan/modules/http/LuanHandler.java Wed Apr 04 14:54:29 2018 -0600 +++ b/src/luan/modules/http/LuanHandler.java Thu Apr 05 16:38:33 2018 -0600 @@ -1,5 +1,6 @@ package luan.modules.http; +import java.io.Closeable; import java.io.Writer; import java.io.PrintWriter; import java.io.IOException; @@ -25,7 +26,7 @@ import luan.modules.PackageLuan; -public class LuanHandler implements Handler { +public class LuanHandler implements Handler, Closeable { private final LuanState luanInit; private final Logger logger; private final ReadWriteLock lock = new ReentrantReadWriteLock(); @@ -40,8 +41,8 @@ } } - public LuanHandler(LuanState luan,String loggerRoot) { - this.luanInit = luan; + public LuanHandler(LuanState luanInit,String loggerRoot) { + this.luanInit = luanInit; if( loggerRoot==null ) loggerRoot = ""; logger = LoggerFactory.getLogger(loggerRoot+LuanHandler.class.getName()); @@ -52,6 +53,7 @@ throw new RuntimeException(e); } setLuan(); + luanInit.onClose(this); } private void setLuan() { @@ -92,7 +94,7 @@ } } - public void close() throws IOException { + public void close() { synchronized(luan) { luan.close(); }