This repository was archived by the owner on Mar 26, 2025. It is now read-only.
Wrong terminal settings on exit. #14
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There is a small problem with terminals info. The effect is that when application exits,
terminal remains in a state when echoing is disabled.
When UnixTerminal object is created, the original term info is recorded into it's internal field [settings].
At the same time a shutdown hook is registered so, that when jvm exits, termial's info get restored [with the recorded settings].
TerminalFactory.create() method unconditionally creates a new instance of UnixTerminal which is not saved internally.
So later calls to TerminalFactory.get() would create a new instance of UnixTerminal and, if called after create(),
will record already altered info, which in turn will be restored in it's shutdown hook.
Shutdown hooks are run in parallel. So there is no particular order of execution and the second terminal created could restore
it's settings after the first one, leaving term in a wrong state.
The simplest solution is not to use TerminalFactory.create() but use TerminalFactory.get() instead, which guarantees to
return the same instance of the terminal.