Bug 1134198 - Don't call Debugger::slowPathOnLeaveFrame on frames no longer in Debugger frame maps. (r=jimb)

This commit is contained in:
Shu-yu Guo 2015-04-02 17:28:02 -07:00
parent 995edf01e3
commit 097db43bde

View File

@ -606,6 +606,13 @@ Debugger::slowPathOnLeaveFrame(JSContext* cx, AbstractFramePtr frame, bool frame
{
Handle<GlobalObject*> global = cx->global();
// The onPop handler and associated clean up logic should not run multiple
// times on the same frame. If slowPathOnLeaveFrame has already been
// called, the frame will not be present in the Debugger frame maps.
FrameRange frameRange(frame, global);
if (frameRange.empty())
return frameOk;
/* Save the frame's completion value. */
JSTrapStatus status;
RootedValue value(cx);
@ -618,8 +625,8 @@ Debugger::slowPathOnLeaveFrame(JSContext* cx, AbstractFramePtr frame, bool frame
if (!cx->isThrowingOverRecursed() && !cx->isThrowingOutOfMemory()) {
/* Build a list of the recipients. */
AutoObjectVector frames(cx);
for (FrameRange r(frame, global); !r.empty(); r.popFront()) {
if (!frames.append(r.frontFrame())) {
for (; !frameRange.empty(); frameRange.popFront()) {
if (!frames.append(frameRange.frontFrame())) {
cx->clearPendingException();
return false;
}