clamshell-cli icon indicating copy to clipboard operation
clamshell-cli copied to clipboard

Wrong terminal settings on exit.

Open andrew-krasny opened this issue 10 years ago • 0 comments

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.

andrew-krasny avatar Jan 12 '15 14:01 andrew-krasny