Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
deps: V8: partially cherry-pick 8953e49478
Very partial cherry-pick of upstream commit v8/v8@8953e49478 that fixes
a hang that shows up in debug builds because of a buggy sanity check
when computing relationships between command line flags.

Example of the hang:

    #include "v8.h"
    #include "libplatform/libplatform.h"
    int main(void) {
      // works: v8::V8::SetFlagsFromString("--gc-global --noincremental-marking");
      v8::V8::SetFlagsFromString("--gc-global");
      v8::V8::SetFlagsFromString("--noincremental-marking");
      v8::V8::InitializePlatform(v8::platform::NewDefaultPlatform().release());
      v8::V8::Initialize(); // hangs in ComputeFlagListHash when defined(DEBUG)
    }
  • Loading branch information
bnoordhuis committed Oct 5, 2024
commit 9c9b416093b9543e7c3d33005759d75519f84c60
5 changes: 5 additions & 0 deletions deps/v8/src/flags/flags-impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
#ifndef V8_FLAGS_FLAGS_IMPL_H_
#define V8_FLAGS_FLAGS_IMPL_H_

#include <unordered_set>

#include "src/base/macros.h"
#include "src/base/optional.h"
#include "src/base/vector.h"
Expand Down Expand Up @@ -91,9 +93,12 @@ struct Flag {
#ifdef DEBUG
bool ImpliedBy(const void* ptr) const {
const Flag* current = this->implied_by_ptr_;
std::unordered_set<const Flag*> visited_flags;
while (current != nullptr) {
visited_flags.insert(current);
if (current->PointsTo(ptr)) return true;
current = current->implied_by_ptr_;
if (visited_flags.contains(current)) break;
}
return false;
}
Expand Down