fix: NodeService order-of-destruction issue (#39783)

* refactor: make ElectronRendererClient::node_bindings_ a const ptr

refactor: make ElectronRendererClient::electron_bindings_ a const ptr

* fix: order-of-destruction bug in NodeService

js_env_ depends on the uv_loop from node_bindings_, but is destroyed after node_bindings_

* chore: revert unintentional commit
This commit is contained in:
Charles Kerr 2023-09-12 05:27:14 -05:00 коммит произвёл GitHub
Родитель ec9c8476fe
Коммит a1c44a18e2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 14 добавлений и 6 удалений

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

@ -20,10 +20,10 @@ namespace electron {
NodeService::NodeService(
mojo::PendingReceiver<node::mojom::NodeService> receiver)
: node_bindings_(
NodeBindings::Create(NodeBindings::BrowserEnvironment::kUtility)),
electron_bindings_(
std::make_unique<ElectronBindings>(node_bindings_->uv_loop())) {
: node_bindings_{NodeBindings::Create(
NodeBindings::BrowserEnvironment::kUtility)},
electron_bindings_{
std::make_unique<ElectronBindings>(node_bindings_->uv_loop())} {
if (receiver.is_valid())
receiver_.Bind(std::move(receiver));
}

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

@ -37,10 +37,18 @@ class NodeService : public node::mojom::NodeService {
private:
bool node_env_stopped_ = false;
const std::unique_ptr<NodeBindings> node_bindings_;
// depends-on: node_bindings_'s uv_loop
const std::unique_ptr<ElectronBindings> electron_bindings_;
// depends-on: node_bindings_'s uv_loop
std::unique_ptr<JavascriptEnvironment> js_env_;
std::unique_ptr<NodeBindings> node_bindings_;
std::unique_ptr<ElectronBindings> electron_bindings_;
// depends-on: js_env_'s isolate
std::shared_ptr<node::Environment> node_env_;
mojo::Receiver<node::mojom::NodeService> receiver_{this};
};