From 23e3887e05ab650f1dd695767181c76fea2e5b77 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 10 Jul 2015 18:06:06 +0000 Subject: [PATCH] avoid infinite loop with GCCGO Signed-off-by: Srini Brahmaroutu --- libcontainer/stacktrace/capture.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libcontainer/stacktrace/capture.go b/libcontainer/stacktrace/capture.go index 15b3482c..5ee6e37a 100644 --- a/libcontainer/stacktrace/capture.go +++ b/libcontainer/stacktrace/capture.go @@ -9,13 +9,17 @@ func Capture(userSkip int) Stacktrace { var ( skip = userSkip + 1 // add one for our own function frames []Frame + prevPc uintptr = 0 ) for i := skip; ; i++ { pc, file, line, ok := runtime.Caller(i) - if !ok { + //detect if caller is repeated to avoid loop, gccgo + //currently runs into a loop without this check + if !ok || pc == prevPc { break } frames = append(frames, NewFrame(pc, file, line)) + prevPc = pc } return Stacktrace{ Frames: frames,