瀏覽代碼

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 9 年之前
父節點
當前提交
83c186fdd4
共有 1 個文件被更改,包括 3 次插入1 次删除
  1. 3 1
      pkg/term/term_windows.go

+ 3 - 1
pkg/term/term_windows.go

@@ -44,9 +44,11 @@ func StdStreams() (stdIn io.ReadCloser, stdOut, stdErr io.Writer) {
 		if err = winterm.SetConsoleMode(fd, mode|enableVirtualTerminalInput); err != nil {
 			emulateStdin = true
 		} else {
-			winterm.SetConsoleMode(fd, mode)
 			vtInputSupported = true
 		}
+		// Unconditionally set the console mode back even on failure because SetConsoleMode
+		// remembers invalid bits on input handles.
+		winterm.SetConsoleMode(fd, mode)
 	}
 
 	fd = os.Stdout.Fd()