changeset 1850:64b7076c635c

better link_to_domain
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 22 Feb 2025 20:26:31 -0700
parents 9f2680fe532b
children 9d093f14e240
files src/goodjava/webserver/handlers/DomainHandler.java src/luan/host/WebHandler.java
diffstat 2 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
diff -r 9f2680fe532b -r 64b7076c635c src/goodjava/webserver/handlers/DomainHandler.java
--- a/src/goodjava/webserver/handlers/DomainHandler.java	Fri Feb 21 12:23:56 2025 -0700
+++ b/src/goodjava/webserver/handlers/DomainHandler.java	Sat Feb 22 20:26:31 2025 -0700
@@ -24,6 +24,10 @@
 		public Handler newHandler(String domain);
 	}
 
+	public interface HandlerCloseable extends Closeable {
+		public boolean isClosed();
+	}
+
 	private static class MyTask extends TimerTask {
 		private final Set<Handler> dontGc;
 
@@ -70,6 +74,10 @@
 		domain = domain.toLowerCase().intern();
 		synchronized(domain) {
 			Handler handler = map.get(domain);
+			if( handler instanceof HandlerCloseable && ((HandlerCloseable)handler).isClosed() ) {
+				removeHandler(domain);
+				handler = null;
+			}
 			if( handler == null ) {
 				//if(ref!=null) logger.info("gc "+domain);
 				handler = factory.newHandler(domain);
diff -r 9f2680fe532b -r 64b7076c635c src/luan/host/WebHandler.java
--- a/src/luan/host/WebHandler.java	Fri Feb 21 12:23:56 2025 -0700
+++ b/src/luan/host/WebHandler.java	Sat Feb 22 20:26:31 2025 -0700
@@ -44,9 +44,10 @@
 	private static final Logger logger = LoggerFactory.getLogger(WebHandler.class);
 	private static final long days30 = 1000L*60*60*24*30;
 
-	private static final class MyHandler implements Handler, Closeable {
+	private static final class MyHandler implements Handler, DomainHandler.HandlerCloseable {
 		private final Handler handler;
 		final LuanHandler luanHandler;
+		private boolean isClosed = false;
 
 		MyHandler(Handler handler,LuanHandler luanHandler) {
 			this.handler = handler;
@@ -60,6 +61,11 @@
 		@Override public void close() {
 			dontGc.remove(this);
 			luanHandler.close();
+			isClosed = true;
+		}
+
+		@Override public boolean isClosed() {
+			return isClosed;
 		}
 
 		protected void finalize() throws Throwable {