From 75a74834384836a566dc0661642a10ce6ab9be4e Mon Sep 17 00:00:00 2001 From: Mandar Chitre Date: Sun, 4 Feb 2024 15:36:23 +0800 Subject: [PATCH] fix(remote): enforce timeout with slave containers even if interrupted --- .../arl/fjage/remote/ConnectionHandler.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/arl/fjage/remote/ConnectionHandler.java b/src/main/java/org/arl/fjage/remote/ConnectionHandler.java index 5399f5b1..74b61734 100644 --- a/src/main/java/org/arl/fjage/remote/ConnectionHandler.java +++ b/src/main/java/org/arl/fjage/remote/ConnectionHandler.java @@ -240,17 +240,25 @@ JsonMessage printlnAndGetResponse(String s, String id, long timeout) { if (conn == null) return null; if (keepAlive && !alive && container instanceof MasterContainer) return null; pending.put(id, id); - try { - synchronized(id) { - println(s); - id.wait(timeout); + long deadline = System.currentTimeMillis() + timeout; + synchronized(id) { + println(s); + long dt = deadline - System.currentTimeMillis(); + while (dt > 0) { + try { + id.wait(dt); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + Object rv = pending.get(id); + if (rv instanceof JsonMessage) { + pending.remove(id); + return (JsonMessage)rv; + } + dt = deadline - System.currentTimeMillis(); } - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); } - Object rv = pending.get(id); pending.remove(id); - if (rv instanceof JsonMessage) return (JsonMessage)rv; if (keepAlive && alive) { alive = false; log.fine("Connection dead");