Clean up node environment on exit in main process
This commit is contained in:
parent
d009b3267a
commit
a0605275b9
4 changed files with 29 additions and 0 deletions
|
@ -132,6 +132,7 @@ void AtomBrowserMainParts::PostEarlyInitialization() {
|
||||||
// Create the global environment.
|
// Create the global environment.
|
||||||
node::Environment* env =
|
node::Environment* env =
|
||||||
node_bindings_->CreateEnvironment(js_env_->context());
|
node_bindings_->CreateEnvironment(js_env_->context());
|
||||||
|
node_env_.reset(new NodeEnvironment(env));
|
||||||
|
|
||||||
// Make sure node can get correct environment when debugging.
|
// Make sure node can get correct environment when debugging.
|
||||||
if (node_debugger_->IsRunning())
|
if (node_debugger_->IsRunning())
|
||||||
|
|
|
@ -22,6 +22,7 @@ class Browser;
|
||||||
class JavascriptEnvironment;
|
class JavascriptEnvironment;
|
||||||
class NodeBindings;
|
class NodeBindings;
|
||||||
class NodeDebugger;
|
class NodeDebugger;
|
||||||
|
class NodeEnvironment;
|
||||||
class BridgeTaskRunner;
|
class BridgeTaskRunner;
|
||||||
|
|
||||||
class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
||||||
|
@ -79,6 +80,7 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
||||||
|
|
||||||
std::unique_ptr<Browser> browser_;
|
std::unique_ptr<Browser> browser_;
|
||||||
std::unique_ptr<JavascriptEnvironment> js_env_;
|
std::unique_ptr<JavascriptEnvironment> js_env_;
|
||||||
|
std::unique_ptr<NodeEnvironment> node_env_;
|
||||||
std::unique_ptr<NodeBindings> node_bindings_;
|
std::unique_ptr<NodeBindings> node_bindings_;
|
||||||
std::unique_ptr<AtomBindings> atom_bindings_;
|
std::unique_ptr<AtomBindings> atom_bindings_;
|
||||||
std::unique_ptr<NodeDebugger> node_debugger_;
|
std::unique_ptr<NodeDebugger> node_debugger_;
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#include "gin/array_buffer.h"
|
#include "gin/array_buffer.h"
|
||||||
#include "gin/v8_initializer.h"
|
#include "gin/v8_initializer.h"
|
||||||
|
|
||||||
|
#include "atom/common/node_includes.h"
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
JavascriptEnvironment::JavascriptEnvironment()
|
JavascriptEnvironment::JavascriptEnvironment()
|
||||||
|
@ -46,4 +48,11 @@ bool JavascriptEnvironment::Initialize() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NodeEnvironment::NodeEnvironment(node::Environment* env) : env_(env) {
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeEnvironment::~NodeEnvironment() {
|
||||||
|
node::FreeEnvironment(env_);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
|
@ -8,8 +8,13 @@
|
||||||
#include "base/macros.h"
|
#include "base/macros.h"
|
||||||
#include "gin/public/isolate_holder.h"
|
#include "gin/public/isolate_holder.h"
|
||||||
|
|
||||||
|
namespace node {
|
||||||
|
class Environment;
|
||||||
|
}
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
|
// Manage the V8 isolate and context automatically.
|
||||||
class JavascriptEnvironment {
|
class JavascriptEnvironment {
|
||||||
public:
|
public:
|
||||||
JavascriptEnvironment();
|
JavascriptEnvironment();
|
||||||
|
@ -37,6 +42,18 @@ class JavascriptEnvironment {
|
||||||
DISALLOW_COPY_AND_ASSIGN(JavascriptEnvironment);
|
DISALLOW_COPY_AND_ASSIGN(JavascriptEnvironment);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Manage the Node Environment automatically.
|
||||||
|
class NodeEnvironment {
|
||||||
|
public:
|
||||||
|
NodeEnvironment(node::Environment* env);
|
||||||
|
~NodeEnvironment();
|
||||||
|
|
||||||
|
private:
|
||||||
|
node::Environment* env_;
|
||||||
|
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(NodeEnvironment);
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
||||||
#endif // ATOM_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
|
#endif // ATOM_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
|
||||||
|
|
Loading…
Reference in a new issue