From 630c20124e71d43c9fbfc0e3773c2b2330145d67 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 19 Jul 2017 00:13:39 +0300 Subject: [PATCH] =?UTF-8?q?Zond:fix:=20=D0=B7=D0=B0=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B9=20=D0=BD=D0=B0=20read()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/asys/zond/PipeInputStream.java | 13 +++++++++++ .../java/asys/zond/ZondCommandHandler.java | 3 ++- .../java/asys/zond/ZondExecuteWatchdog.java | 23 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 zond/src/main/java/asys/zond/ZondExecuteWatchdog.java diff --git a/zond/src/main/java/asys/zond/PipeInputStream.java b/zond/src/main/java/asys/zond/PipeInputStream.java index f09bfdc..635967c 100644 --- a/zond/src/main/java/asys/zond/PipeInputStream.java +++ b/zond/src/main/java/asys/zond/PipeInputStream.java @@ -12,6 +12,7 @@ public class PipeInputStream extends InputStream { private int lastWritePos = 0, lastReadPos = 0, wallPos = buffer.length-1; + private boolean closed = false; public synchronized void write(String s) { byte[] strBytes = s.getBytes(); @@ -46,6 +47,7 @@ public class PipeInputStream extends InputStream { return 0; } } + if (closed) return 0; if (lastReadPos == wallPos) { lastReadPos = 0; @@ -68,6 +70,7 @@ public class PipeInputStream extends InputStream { return 0; } } + if (closed) return 0; int actualLen = len; if (lastReadPos > lastWritePos) { @@ -88,4 +91,14 @@ public class PipeInputStream extends InputStream { notify(); return actualLen; } + + public void open() { + closed = false; + } + + @Override + public synchronized void close() { + this.closed = true; + notify(); + } } diff --git a/zond/src/main/java/asys/zond/ZondCommandHandler.java b/zond/src/main/java/asys/zond/ZondCommandHandler.java index 8de0a52..1e74d82 100644 --- a/zond/src/main/java/asys/zond/ZondCommandHandler.java +++ b/zond/src/main/java/asys/zond/ZondCommandHandler.java @@ -48,8 +48,9 @@ public class ZondCommandHandler implements CommandHandler { Shell.getInstance().shutdown(); } else if (line.equalsIgnoreCase("start")) { if (watchdog == null) { - watchdog = new ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT); + watchdog = new ZondExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT, proxyStdIn); executor.setWatchdog(watchdog); + Runnable task = () -> { int code = 0; try { diff --git a/zond/src/main/java/asys/zond/ZondExecuteWatchdog.java b/zond/src/main/java/asys/zond/ZondExecuteWatchdog.java new file mode 100644 index 0000000..0958d9b --- /dev/null +++ b/zond/src/main/java/asys/zond/ZondExecuteWatchdog.java @@ -0,0 +1,23 @@ +/* + * DmitriyMX + * 2017-07-19 + */ +package asys.zond; + +import org.apache.commons.exec.ExecuteWatchdog; + +public class ZondExecuteWatchdog extends ExecuteWatchdog { + private final PipeInputStream inputStream; + + public ZondExecuteWatchdog(long timeout, PipeInputStream inputStream) { + super(timeout); + this.inputStream = inputStream; + inputStream.open(); + } + + @Override + public synchronized void stop() { + super.stop(); + inputStream.close(); + } +}