From f53c0235fad462c4a1608b9ddfad4aeba7b26d72 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 18 Jul 2019 09:37:07 +0200 Subject: pkg/cover: fix objdump process hang One instance we observed that objdump hanged due to stdout pipe overflow due to panic in archCallInsn. The reason for the original panic is still unclear, but fix the objdump hang. We need to terminate objdump and propagate the panic. Also extend the panic messages. --- pkg/cover/report.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'pkg') diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 1b182b73a..cc064001c 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -157,7 +157,10 @@ func (rg *ReportGenerator) readPCs() error { if err := cmd.Start(); err != nil { return fmt.Errorf("failed to run objdump on %v: %v", rg.vmlinux, err) } - defer cmd.Wait() + defer func() { + cmd.Process.Kill() + cmd.Wait() + }() s := bufio.NewScanner(stdout) callInsnS, traceFuncS := archCallInsn(rg.arch) callInsn, traceFunc := []byte(callInsnS), []byte(traceFuncS) @@ -310,7 +313,7 @@ func PreviousInstructionPC(arch string, pc uint64) uint64 { case "ppc64le": return pc - 4 default: - panic("unknown arch") + panic(fmt.Sprintf("unknown arch %q", arch)) } } @@ -333,7 +336,7 @@ func archCallInsn(arch string) (string, string) { // c00000000006d904: bl c000000000350780 <.__sanitizer_cov_trace_pc> return "\tbl ", " <.__sanitizer_cov_trace_pc>" default: - panic("unknown arch") + panic(fmt.Sprintf("unknown arch %q", arch)) } } -- cgit mrf-deployment