diff --git a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java index 49306dd1..cf39a924 100644 --- a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java +++ b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java @@ -763,12 +763,17 @@ && getLastBinding().charAt(0) == originalAttributes.getControlChar(ControlChar.V throw e; } } finally { - boolean interrupted = Thread.interrupted(); + AtomicBoolean interrupted = new AtomicBoolean(Thread.interrupted()); try { lock.lock(); this.reading = false; + Terminal.SignalHandler tmpHandler = terminal.handle(Signal.INT, s -> interrupted.set(true)); + if (previousIntrHandler == null) { + previousIntrHandler = tmpHandler; + } + cleanup(); if (originalAttributes != null) { terminal.setAttributes(originalAttributes); @@ -785,7 +790,7 @@ && getLastBinding().charAt(0) == originalAttributes.getControlChar(ControlChar.V } finally { lock.unlock(); startedReading.set(false); - if (interrupted) { + if (interrupted.get()) { Thread.currentThread().interrupt(); } }