aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2019-01-28 20:00:01 -0800
committerDan Willemsen <dwillemsen@google.com>2019-01-28 20:00:01 -0800
commitef661b7f188bfa98bc5d83213f2a5a9f0407ee49 (patch)
treeb9bbac9c7acd50a217d4d8bd68da2f286cc8c393 /ui
parent62f6fcbbb9528b58fd98e5fd5c71e484844be12f (diff)
downloadbuild_soong-ef661b7f188bfa98bc5d83213f2a5a9f0407ee49.tar.gz
build_soong-ef661b7f188bfa98bc5d83213f2a5a9f0407ee49.tar.bz2
build_soong-ef661b7f188bfa98bc5d83213f2a5a9f0407ee49.zip
Fix runtime panics being suppressed
fatalLog was matching runtime errors, and essentially hiding them. Test: m blueprint_tools Change-Id: Ib48e7e142fc096998bc14b21fb717392adcff0ec
Diffstat (limited to 'ui')
-rw-r--r--ui/logger/logger.go10
-rw-r--r--ui/logger/logger_test.go14
2 files changed, 20 insertions, 4 deletions
diff --git a/ui/logger/logger.go b/ui/logger/logger.go
index c763e50c..58890e96 100644
--- a/ui/logger/logger.go
+++ b/ui/logger/logger.go
@@ -73,7 +73,9 @@ type Logger interface {
}
// fatalLog is the type used when Fatal[f|ln]
-type fatalLog error
+type fatalLog struct {
+ error
+}
func fileRotation(from, baseName, ext string, cur, max int) error {
newName := baseName + "." + strconv.Itoa(cur) + ext
@@ -273,7 +275,7 @@ func (s *stdLogger) Verboseln(v ...interface{}) {
func (s *stdLogger) Fatal(v ...interface{}) {
output := fmt.Sprint(v...)
s.Output(2, output)
- panic(fatalLog(errors.New(output)))
+ panic(fatalLog{errors.New(output)})
}
// Fatalf is equivalent to Printf() followed by a call to panic() that
@@ -281,7 +283,7 @@ func (s *stdLogger) Fatal(v ...interface{}) {
func (s *stdLogger) Fatalf(format string, v ...interface{}) {
output := fmt.Sprintf(format, v...)
s.Output(2, output)
- panic(fatalLog(errors.New(output)))
+ panic(fatalLog{errors.New(output)})
}
// Fatalln is equivalent to Println() followed by a call to panic() that
@@ -289,7 +291,7 @@ func (s *stdLogger) Fatalf(format string, v ...interface{}) {
func (s *stdLogger) Fatalln(v ...interface{}) {
output := fmt.Sprintln(v...)
s.Output(2, output)
- panic(fatalLog(errors.New(output)))
+ panic(fatalLog{errors.New(output)})
}
// Panic is equivalent to Print() followed by a call to panic().
diff --git a/ui/logger/logger_test.go b/ui/logger/logger_test.go
index bdf0231a..044e6f0b 100644
--- a/ui/logger/logger_test.go
+++ b/ui/logger/logger_test.go
@@ -196,3 +196,17 @@ func TestRecoverNonFatal(t *testing.T) {
log.Panic("Test")
t.Errorf("Should not get here")
}
+
+func TestRuntimePanic(t *testing.T) {
+ defer func() {
+ if p := recover(); p == nil {
+ t.Errorf("Panic not thrown")
+ }
+ }()
+ defer Recover(func(err error) {
+ t.Errorf("Recover function should not be called")
+ })
+ var i *int
+ *i = 0
+ t.Errorf("Should not get here")
+}