This repository was archived by the owner on Mar 26, 2025. It is now read-only.
Wrong terminal settings on exit.#14
Open
andrew-krasny wants to merge 1 commit intovladimirvivien:masterfrom
Open
Wrong terminal settings on exit.#14andrew-krasny wants to merge 1 commit intovladimirvivien:masterfrom
andrew-krasny wants to merge 1 commit intovladimirvivien:masterfrom
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.