RFR: JDK-8202105: jshell tool: on exiting, terminal echo is disabled
jan.lahoda at oracle.com
Wed Apr 25 20:34:33 UTC 2018
JShell uses two processes - the main one interacts with the terminal and
compiles the user's snippets. The other one runs the snippets, and is
not connected to a terminal, so System.console() does not work there.
IIRC the call to System.console() in jshell/jline that is part of this
problem is basically a way to call Console.istty() - the returned
Console is not used. I was considering tweaking jshell to avoid this
issue, and I think it would be possible, but seemed some other programs
might run into issues as well, so seemed better to fix in Console.
On 25.4.2018 17:52, Xueming Shen wrote:
> Hi Jan,
> I saw System.console() returns null inside jshell ... but it seems there
> are 2 vms.
> I would assume jshell itself sets the terminal to raw and then call
> for example an alternative for this issue is to ask jshell's impl to
> call System.console()
> before going into raw mode? No, I'm not saying the proposed one is not a
> good one,
> just wanted to make sure I understand the situation correctly.
> On 4/25/18, 4:50 AM, Jan Lahoda wrote:
>> j.i.Console was changed to capture the state of the terminal echo at
>> creation time, and to restore it on shutdown.
>> That is problematic at least in jshell, where the terminal is already
>> in the raw mode when j.i.Console is created, and so "echo disabled" is
>> recorded there. So even though jshell itself sets the terminal into
>> the original mode when it terminates, the shutdown hook in
>> j.i.Console, which is run later, sets the echo to off even if it was
>> enabled before the VM started.
>> My understanding is that the shutdown hook is only needed in case the
>> VM goes down while readPassword is running. So I tried to change the
>> shutdown hook to only work while readPassword is running.
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8202105
>> Webrev: http://cr.openjdk.java.net/~jlahoda/8202105/webrev.00/
>> What do you think?
More information about the core-libs-dev