proc_test: deflake TestSystemstackOnRuntimeNewstack (#1078)
Depending on how the runtime schedules our goroutines we can get unlucky and have the first call to runtime.newstack we intercept be for a different goroutine (usually the garbage collector). Only check stacktraces that happen on the same goroutine that executed main.main.
This commit is contained in:
parent
3f3de1a9b5
commit
bc77ff4534
@ -3365,11 +3365,21 @@ func TestSystemstackOnRuntimeNewstack(t *testing.T) {
|
|||||||
_, err := setFunctionBreakpoint(p, "main.main")
|
_, err := setFunctionBreakpoint(p, "main.main")
|
||||||
assertNoError(err, t, "setFunctionBreakpoint(main.main)")
|
assertNoError(err, t, "setFunctionBreakpoint(main.main)")
|
||||||
assertNoError(proc.Continue(p), t, "first continue")
|
assertNoError(proc.Continue(p), t, "first continue")
|
||||||
_, err = setFunctionBreakpoint(p, "runtime.newstack")
|
|
||||||
assertNoError(err, t, "setFunctionBreakpoint(runtime.newstack)")
|
|
||||||
assertNoError(proc.Continue(p), t, "second continue")
|
|
||||||
g, err := proc.GetG(p.CurrentThread())
|
g, err := proc.GetG(p.CurrentThread())
|
||||||
assertNoError(err, t, "GetG")
|
assertNoError(err, t, "GetG")
|
||||||
|
mainGoroutineID := g.ID
|
||||||
|
|
||||||
|
_, err = setFunctionBreakpoint(p, "runtime.newstack")
|
||||||
|
assertNoError(err, t, "setFunctionBreakpoint(runtime.newstack)")
|
||||||
|
for {
|
||||||
|
assertNoError(proc.Continue(p), t, "second continue")
|
||||||
|
g, err = proc.GetG(p.CurrentThread())
|
||||||
|
assertNoError(err, t, "GetG")
|
||||||
|
if g.ID == mainGoroutineID {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
frames, err := g.Stacktrace(100)
|
frames, err := g.Stacktrace(100)
|
||||||
assertNoError(err, t, "stacktrace")
|
assertNoError(err, t, "stacktrace")
|
||||||
logStacktrace(t, frames)
|
logStacktrace(t, frames)
|
||||||
|
Loading…
Reference in New Issue
Block a user