diff options
author | Dan Willemsen <dwillemsen@google.com> | 2019-01-28 20:00:01 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2019-01-28 20:00:01 -0800 |
commit | ef661b7f188bfa98bc5d83213f2a5a9f0407ee49 (patch) | |
tree | b9bbac9c7acd50a217d4d8bd68da2f286cc8c393 /ui | |
parent | 62f6fcbbb9528b58fd98e5fd5c71e484844be12f (diff) | |
download | build_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.go | 10 | ||||
-rw-r--r-- | ui/logger/logger_test.go | 14 |
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") +} |