Permalink
Browse files

src: destroy inspector agent before context

The inspector_agent depends on the context still being accessible
during the destructor execution.

PR-URL: #16472
Fixes: #15558
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information...
ofrobots committed Oct 25, 2017
1 parent e8de2bf commit e3503aca086f3f2f9587004ac594ed83a57f7443
Showing with 9 additions and 4 deletions.
  1. +6 −1 src/env-inl.h
  2. +3 −3 src/env.h
View
@@ -306,7 +306,7 @@ inline Environment::Environment(IsolateData* isolate_data,
emit_napi_warning_(true),
makecallback_cntr_(0),
#if HAVE_INSPECTOR
inspector_agent_(this),
inspector_agent_(new inspector::Agent(this)),
#endif
handle_cleanup_waiting_(0),
http_parser_buffer_(nullptr),
@@ -347,6 +347,11 @@ inline Environment::Environment(IsolateData* isolate_data,
inline Environment::~Environment() {
v8::HandleScope handle_scope(isolate());
#if HAVE_INSPECTOR
// Destroy inspector agent before erasing the context.
delete inspector_agent_;
#endif
context()->SetAlignedPointerInEmbedderData(kContextEmbedderDataIndex,
nullptr);
#define V(PropertyName, TypeName) PropertyName ## _.Reset();
View
@@ -667,8 +667,8 @@ class Environment {
#undef V
#if HAVE_INSPECTOR
inline inspector::Agent* inspector_agent() {
return &inspector_agent_;
inline inspector::Agent* inspector_agent() const {
return inspector_agent_;
}
#endif
@@ -713,7 +713,7 @@ class Environment {
std::map<std::string, uint64_t> performance_marks_;
#if HAVE_INSPECTOR
inspector::Agent inspector_agent_;
inspector::Agent* const inspector_agent_;
#endif
HandleWrapQueue handle_wrap_queue_;

0 comments on commit e3503ac

Please sign in to comment.