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/8c60f0e6 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/8c60f0e6 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/8c60f0e6 Branch: refs/heads/karaf-3.0.x Commit: 8c60f0e6ad9fdeeb89fd26db2de4e032621ab9fa Parents: b9cecab Author: Jonathan Anstey <[email protected]> Authored: Wed Jun 4 16:34:21 2014 -0230 Committer: Jonathan Anstey <[email protected]> Committed: Wed Jun 4 16:34:21 2014 -0230 ---------------------------------------------------------------------- .../java/org/apache/karaf/log/command/LogTail.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/8c60f0e6/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java ---------------------------------------------------------------------- diff --git a/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java index 93ae14a..25ccfd6 100644 --- a/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java +++ b/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java @@ -31,8 +31,11 @@ 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); @@ -41,6 +44,7 @@ public class LogTail extends DisplayLog { } } printThread.abort(); + readKeyboardThread.abort(); executorService.shutdownNow(); return null; } @@ -48,12 +52,18 @@ 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) {
