fix: destruction order of js env fields (#39521)

isolate_ depends on isolate_holder_ and so must be destroyed first.
This commit is contained in:
Charles Kerr 2023-08-16 23:06:24 -05:00 коммит произвёл GitHub
Родитель b04ce6a5c8
Коммит dd8df3b0c4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 9 добавлений и 4 удалений

Просмотреть файл

@ -104,9 +104,10 @@ gin::IsolateHolder CreateIsolateHolder(v8::Isolate* isolate) {
JavascriptEnvironment::JavascriptEnvironment(uv_loop_t* event_loop,
bool setup_wasm_streaming)
: isolate_(Initialize(event_loop, setup_wasm_streaming)),
isolate_holder_(CreateIsolateHolder(isolate_)),
locker_(isolate_) {
: isolate_holder_{CreateIsolateHolder(
Initialize(event_loop, setup_wasm_streaming))},
isolate_{isolate_holder_.isolate()},
locker_{isolate_} {
isolate_->Enter();
v8::HandleScope scope(isolate_);

Просмотреть файл

@ -43,8 +43,12 @@ class JavascriptEnvironment {
v8::Isolate* Initialize(uv_loop_t* event_loop, bool setup_wasm_streaming);
std::unique_ptr<node::MultiIsolatePlatform> platform_;
raw_ptr<v8::Isolate> isolate_;
gin::IsolateHolder isolate_holder_;
// owned-by: isolate_holder_
const raw_ptr<v8::Isolate> isolate_;
// depends-on: isolate_
v8::Locker locker_;
std::unique_ptr<MicrotasksRunner> microtasks_runner_;