diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java index a14ee421778..61a6aaec0c3 100644 --- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java +++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java @@ -473,6 +473,7 @@ private CharSequence readCommand(AtomicBoolean reading) throws UserInterruptExce command = ""; } catch (Throwable t) { ShellUtil.logException(this, t); + command = ""; } finally { reading.set(false); } diff --git a/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java b/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java index de871baf02f..862a895c8e4 100644 --- a/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java +++ b/shell/core/src/main/java/org/apache/karaf/shell/support/ShellUtil.java @@ -183,8 +183,9 @@ public static void logException(Session session, Throwable t) { session.getConsole().println(str); } session.getConsole().flush(); - } catch (Exception ignore) { - // ignore + } catch (Throwable ignore) { + // ignore (catch Throwable to handle LinkageError from JLine classloader + // changes during bundle refresh, which would otherwise kill the console thread) } }