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) {

Reply via email to