Browse code

Windows: run -it not crash in ISE

Signed-off-by: John Howard <jhoward@microsoft.com>

John Howard authored on 2016/05/25 05:03:13
Showing 3 changed files
... ...
@@ -28,6 +28,7 @@ type ansiReader struct {
28 28
 }
29 29
 
30 30
 func newAnsiReader(nFile int) *ansiReader {
31
+	initLogger()
31 32
 	file, fd := winterm.GetStdFile(nFile)
32 33
 	return &ansiReader{
33 34
 		file:    file,
... ...
@@ -3,16 +3,12 @@
3 3
 package windows
4 4
 
5 5
 import (
6
-	"io/ioutil"
7 6
 	"os"
8 7
 
9 8
 	ansiterm "github.com/Azure/go-ansiterm"
10 9
 	"github.com/Azure/go-ansiterm/winterm"
11
-	"github.com/Sirupsen/logrus"
12 10
 )
13 11
 
14
-var logger *logrus.Logger
15
-
16 12
 // ansiWriter wraps a standard output file (e.g., os.Stdout) providing ANSI sequence translation.
17 13
 type ansiWriter struct {
18 14
 	file           *os.File
... ...
@@ -25,18 +21,7 @@ type ansiWriter struct {
25 25
 }
26 26
 
27 27
 func newAnsiWriter(nFile int) *ansiWriter {
28
-	logFile := ioutil.Discard
29
-
30
-	if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" {
31
-		logFile, _ = os.Create("ansiReaderWriter.log")
32
-	}
33
-
34
-	logger = &logrus.Logger{
35
-		Out:       logFile,
36
-		Formatter: new(logrus.TextFormatter),
37
-		Level:     logrus.DebugLevel,
38
-	}
39
-
28
+	initLogger()
40 29
 	file, fd := winterm.GetStdFile(nFile)
41 30
 	info, err := winterm.GetConsoleScreenBufferInfo(fd)
42 31
 	if err != nil {
... ...
@@ -3,3 +3,31 @@
3 3
 // and return pseudo-streams that convert ANSI sequences to / from Windows Console API calls.
4 4
 
5 5
 package windows
6
+
7
+import (
8
+	"io/ioutil"
9
+	"os"
10
+	"sync"
11
+
12
+	ansiterm "github.com/Azure/go-ansiterm"
13
+	"github.com/Sirupsen/logrus"
14
+)
15
+
16
+var logger *logrus.Logger
17
+var initOnce sync.Once
18
+
19
+func initLogger() {
20
+	initOnce.Do(func() {
21
+		logFile := ioutil.Discard
22
+
23
+		if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" {
24
+			logFile, _ = os.Create("ansiReaderWriter.log")
25
+		}
26
+
27
+		logger = &logrus.Logger{
28
+			Out:       logFile,
29
+			Formatter: new(logrus.TextFormatter),
30
+			Level:     logrus.DebugLevel,
31
+		}
32
+	})
33
+}