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/8a3090b5 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/8a3090b5 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/8a3090b5 Branch: refs/heads/master Commit: 8a3090b5cf2fa3a82b44e3f9681e8964504b146f Parents: 5532278 Author: Jonathan Anstey <[email protected]> Authored: Wed Jun 4 16:39:56 2014 -0230 Committer: Jonathan Anstey <[email protected]> Committed: Wed Jun 4 16:39:56 2014 -0230 ---------------------------------------------------------------------- .../main/java/org/apache/karaf/log/command/LogTail.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/8a3090b5/log/src/main/java/org/apache/karaf/log/command/LogTail.java ---------------------------------------------------------------------- diff --git a/log/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/src/main/java/org/apache/karaf/log/command/LogTail.java index bf2801e..d433c48 100644 --- a/log/src/main/java/org/apache/karaf/log/command/LogTail.java +++ b/log/src/main/java/org/apache/karaf/log/command/LogTail.java @@ -46,8 +46,9 @@ public class LogTail extends DisplayLog { @Override public Object execute() 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); @@ -56,6 +57,7 @@ public class LogTail extends DisplayLog { } } printThread.abort(); + readKeyboardThread.abort(); executorService.shutdownNow(); return null; } @@ -63,12 +65,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) {
