Skip to content

Commit 98d3d08

Browse files
authored
Fix interrupt signal killing application (#958) (#973)
1 parent 247d90b commit 98d3d08

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -763,12 +763,17 @@ && getLastBinding().charAt(0) == originalAttributes.getControlChar(ControlChar.V
763763
throw e;
764764
}
765765
} finally {
766-
boolean interrupted = Thread.interrupted();
766+
AtomicBoolean interrupted = new AtomicBoolean(Thread.interrupted());
767767
try {
768768
lock.lock();
769769

770770
this.reading = false;
771771

772+
Terminal.SignalHandler tmpHandler = terminal.handle(Signal.INT, s -> interrupted.set(true));
773+
if (previousIntrHandler == null) {
774+
previousIntrHandler = tmpHandler;
775+
}
776+
772777
cleanup();
773778
if (originalAttributes != null) {
774779
terminal.setAttributes(originalAttributes);
@@ -785,7 +790,7 @@ && getLastBinding().charAt(0) == originalAttributes.getControlChar(ControlChar.V
785790
} finally {
786791
lock.unlock();
787792
startedReading.set(false);
788-
if (interrupted) {
793+
if (interrupted.get()) {
789794
Thread.currentThread().interrupt();
790795
}
791796
}

0 commit comments

Comments
 (0)