src: do not leak handles on debug and exit
authorFedor Indutny <fedor@indutny.com>
Thu, 12 Mar 2015 21:19:16 +0000 (14:19 -0700)
committerFedor Indutny <fedor@indutny.com>
Thu, 12 Mar 2015 21:29:50 +0000 (14:29 -0700)
Ensure HandleScope is created before creating any new handles (which
`Context::Scope` and `Environment::GetCurrent` does).

PR-URL: https://github.com/iojs/io.js/pull/1133
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: Brian White <mscdex@mscdex.net>
src/node.cc

index 22c4a9b..b283208 100644 (file)
@@ -3195,6 +3195,7 @@ static void DispatchDebugMessagesAsyncCallback(uv_async_t* handle) {
   if (debugger_running == false) {
     fprintf(stderr, "Starting debugger agent.\n");
 
+    HandleScope scope(node_isolate);
     Environment* env = Environment::GetCurrent(node_isolate);
     Context::Scope context_scope(env->context());
 
@@ -3603,8 +3604,8 @@ void AtExit(void (*cb)(void* arg), void* arg) {
 
 
 void EmitBeforeExit(Environment* env) {
-  Context::Scope context_scope(env->context());
   HandleScope handle_scope(env->isolate());
+  Context::Scope context_scope(env->context());
   Local<Object> process_object = env->process_object();
   Local<String> exit_code = FIXED_ONE_BYTE_STRING(env->isolate(), "exitCode");
   Local<Value> args[] = {