Commit 1420e44d authored by Jakob Gruber's avatar Jakob Gruber Committed by Commit Bot

[coverage] Correctly free DebugInfo in the absence of breakpoints

It's quite possible for DebugInfos to exist without the presence of a
bytecode array, since DebugInfos are created for all functions for which
we have a CoverageInfo. Free such objects properly.

Also move the corresponding deletion of CoverageInfos on unload up
before the early exit.

Bug: v8:6000
Change-Id: Idde45b222290aa8b6828b61ff2251918b8ed2aed
Reviewed-on: https://chromium-review.googlesource.com/664811Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48024}
parent 78446a8a
......@@ -337,13 +337,12 @@ bool Debug::Load() {
void Debug::Unload() {
ClearAllBreakPoints();
ClearStepping();
if (FLAG_block_coverage) RemoveAllCoverageInfos();
RemoveDebugDelegate();
// Return debugger is not loaded.
if (!is_loaded()) return;
if (FLAG_block_coverage) RemoveAllCoverageInfos();
// Clear debugger context global handle.
GlobalHandles::Destroy(Handle<Object>::cast(debug_context_).location());
debug_context_ = Handle<Context>();
......@@ -642,8 +641,11 @@ void Debug::ApplyBreakPoints(Handle<DebugInfo> debug_info) {
}
void Debug::ClearBreakPoints(Handle<DebugInfo> debug_info) {
// If we attempt to clear breakpoints but none exist, simply return. This can
// happen e.g. CoverageInfos exit but no breakpoints are set.
if (!debug_info->HasDebugBytecodeArray()) return;
DisallowHeapAllocation no_gc;
DCHECK(debug_info->HasDebugBytecodeArray());
for (BreakIterator it(debug_info); !it.Done(); it.Next()) {
it.ClearDebugBreak();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment