mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
internal/trace: emit final sync event for generation in Go 1.26+
CL 693398 returned the error from reading a generation immediately, but this is wrong -- a Sync event must be emitted to indicate the end of the trace before reporting the error. This caused TestCrashWhileTracing to fail because that test has a high likelihood of producing a truncated trace, and it expects at least 2 Sync events. The truncated trace error would be reported before the second Sync event, which is incorrect. Fixes #75045. Change-Id: Ia71592c4ec56a544afc85cdb7b575e143f80e048 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/696436 Reviewed-by: Carlos Amedee <carlos@golang.org> Auto-Submit: Michael Knyszek <mknyszek@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
786be1d2bf
commit
77f911e31c
1 changed files with 11 additions and 1 deletions
|
|
@ -31,6 +31,7 @@ type Reader struct {
|
||||||
cpuSamples []cpuSample
|
cpuSamples []cpuSample
|
||||||
order ordering
|
order ordering
|
||||||
syncs int
|
syncs int
|
||||||
|
readGenErr error
|
||||||
done bool
|
done bool
|
||||||
|
|
||||||
// Spill state.
|
// Spill state.
|
||||||
|
|
@ -153,9 +154,18 @@ func (r *Reader) ReadEvent() (e Event, err error) {
|
||||||
if r.version < version.Go126 {
|
if r.version < version.Go126 {
|
||||||
return r.nextGenWithSpill()
|
return r.nextGenWithSpill()
|
||||||
}
|
}
|
||||||
|
if r.readGenErr != nil {
|
||||||
|
return Event{}, r.readGenErr
|
||||||
|
}
|
||||||
gen, err := readGeneration(r.r, r.version)
|
gen, err := readGeneration(r.r, r.version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Event{}, err
|
// Before returning an error, emit the sync event
|
||||||
|
// for the current generation and queue up the error
|
||||||
|
// for the next call.
|
||||||
|
r.readGenErr = err
|
||||||
|
r.gen = nil
|
||||||
|
r.syncs++
|
||||||
|
return syncEvent(nil, r.lastTs, r.syncs), nil
|
||||||
}
|
}
|
||||||
return r.installGen(gen)
|
return r.installGen(gen)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue