Browse code

Windows: Restore console mode on set mode failure

SetConsoleMode() on input handles appears to remember invalid bits that
were set, causing problems for other programs (such as xcopy.exe) trying
to set the console mode after docker.exe has exited. Always restore
the input console mode on set failure.

Signed-off-by: John Starks <jostarks@microsoft.com>

John Starks authored on 2016/07/23 10:34:14
Showing 1 changed files
... ...
@@ -44,9 +44,11 @@ func StdStreams() (stdIn io.ReadCloser, stdOut, stdErr io.Writer) {
44 44
 		if err = winterm.SetConsoleMode(fd, mode|enableVirtualTerminalInput); err != nil {
45 45
 			emulateStdin = true
46 46
 		} else {
47
-			winterm.SetConsoleMode(fd, mode)
48 47
 			vtInputSupported = true
49 48
 		}
49
+		// Unconditionally set the console mode back even on failure because SetConsoleMode
50
+		// remembers invalid bits on input handles.
51
+		winterm.SetConsoleMode(fd, mode)
50 52
 	}
51 53
 
52 54
 	fd = os.Stdout.Fd()