KARAF-3021 - Keyboard still read after log:tail cancelled
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/728cd0ee Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/728cd0ee Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/728cd0ee Branch: refs/heads/karaf-2.3.x Commit: 728cd0ee78319bdffbb5d40dd4ba3a3bb3a11c57 Parents: 00e4d34 Author: Jonathan Anstey <[email protected]> Authored: Wed Jun 4 16:23:42 2014 -0230 Committer: Jonathan Anstey <[email protected]> Committed: Wed Jun 4 16:28:51 2014 -0230 ---------------------------------------------------------------------- .../main/java/org/apache/karaf/shell/log/LogTail.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/728cd0ee/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java ---------------------------------------------------------------------- diff --git a/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java b/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java index 1f25ecd..173b0bd 100644 --- a/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java +++ b/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java @@ -36,8 +36,10 @@ public class LogTail extends DisplayLog { protected Object doExecute() throws Exception { PrintEventThread printThread = new PrintEventThread(); + ReadKeyBoardThread readKeyboardThread = new ReadKeyBoardThread(this, Thread.currentThread()); executorService.execute(printThread); - new Thread(new ReadKeyBoardThread(this, Thread.currentThread())).start(); + executorService.execute(readKeyboardThread); + while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(200); @@ -46,6 +48,7 @@ public class LogTail extends DisplayLog { } } printThread.abort(); + readKeyboardThread.abort(); executorService.shutdownNow(); return null; } @@ -53,12 +56,19 @@ public class LogTail extends DisplayLog { class ReadKeyBoardThread implements Runnable { private LogTail logTail; private Thread sessionThread; + boolean readKeyboard = true; + public ReadKeyBoardThread(LogTail logtail, Thread thread) { this.logTail = logtail; this.sessionThread = thread; } + + public void abort() { + readKeyboard = false; + } + public void run() { - for (;;) { + while (readKeyboard) { try { int c = this.logTail.session.getKeyboard().read(); if (c < 0) {
