Hey.

I am getting somewhat confused currently. So, I have been trying out how to 
properly dispose an isolate. But whatever I try, I get an error. If I dispose 
the isolate, I get

#
# Fatal error in ../../deps/v8/src/isolate.h, line 456
# CHECK(isolate != __null) failed
#

But if I dont do that, then...

FATAL ERROR: v8::V8::Dispose() Use v8::Isolate::Dispose() for non-default 
isolate.
Abort trap: 6

I am gonna try to sumarize the code I am working with:

// -> main
        v8::Isolate* isl = v8::Isolate::New();
        isl->Enter();
        
        node::Start(Args.arg_c, Args.arg_v);

// -> node::Start
  int code;
  V8::Initialize();
  {
    Locker locker(node_isolate);
    Environment* env =
        CreateEnvironment(node_isolate, argc, argv, exec_argc, exec_argv);
    // This Context::Scope is here so EnableDebug() can look up the current
    // environment with Environment::GetCurrentChecked().
    // TODO(bnoordhuis) Reorder the debugger initialization logic so it can
    // be removed.
    {
      Context::Scope context_scope(env->context());
      bool more;
      do {
        more = uv_run(env->event_loop(), UV_RUN_ONCE);
        if (more == false) {
          EmitBeforeExit(env);

          // Emit `beforeExit` if the loop became alive either after emitting
          // event, or after running some callbacks.
          more = uv_loop_alive(env->event_loop());
          if (uv_run(env->event_loop(), UV_RUN_NOWAIT) != 0)
            more = true;
        }
      } while (more == true);
      code = EmitExit(env);
      RunAtExit(env);
    }
    env->Dispose();
    env = NULL;
  }

// -> back to main
  v8::V8::Dispose();


Environment holds a pointer to the v8::Isolate. the Dispose() method is quite 
simple:

Environment::Dispose() {
        delete this;
}

So what is going wrong here o-o? I am loosing a bit of an overview right now.

Kind regards, Ingwie
Am 26.03.2014 um 08:36 schrieb Ben Noordhuis <[email protected]>:

> On Wed, Mar 26, 2014 at 1:05 AM, Kevin Ingwersen
> <[email protected]> wrote:
>> Hey.
>> 
>> When I create a custom isolate, and then call V8::Dispose(), I get a big 
>> error:
>> 
>> #
>> # Fatal error in ../../deps/v8/src/isolate.h, line 456
>> # CHECK(isolate != __null) failed
>> #
>> 
>> ==== C stack trace ===============================
>> 
>> 1: ??
>> 2: ??
>> 3: ??
>> 4: ??
>> 5: ??
>> 6: ??
>> 7: ??
>> 8: ??
>> Process 24211 stopped
>> * thread #2: tid = 0x3d7156, 0x0000000100836755 
>> node`v8::internal::OS::DebugBreak() + 5 at platform-posix.cc:294, stop 
>> reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
>>    frame #0: 0x0000000100836755 node`v8::internal::OS::DebugBreak() + 5 at 
>> platform-posix.cc:294
>>   291  #else
>>   292  #error Unsupported host architecture.
>>   293  #endif
>> -> 294  }
>>   295
>>   296
>>   297  // 
>> ----------------------------------------------------------------------------
>> 
>> I am initializing my isolate with:
>> 
>>        v8::Isolate *isl = v8::Isolate::New();
>>        isl->Enter();
>> 
>> Then the code runs, and at the bottom:
>> 
>>  node_isolate->Exit();
>>  node_isolate->Dispose();
>> 
>> A while after is the V8::Dispose(). When i comment this call out, the 
>> programm exits just as I expected. Otherwise, it crashes with the posted 
>> bunch above. What is the reason for this?
>> 
>> Kind regards, Ingwie.
> 
> There is still something that uses the isolate.  Make sure you use
> proper scoping in your C++ code, i.e.:
> 
>  CHECK(V8::Initialize() == true);
>  Isolate* isolate = Isolate::New();
>  {
>    Isolate::Scope isolate_scope(isolate);
>    HandleScope handle_scope(isolate);
>    Local<Context> = Context::New(...);
>    CHECK(context.IsEmpty() == false);
>    {
>      Context::Scope context_scope(context);
>      // etc.
>    }
>  }
>  CHECK(V8::Dispose() == true);



-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to