I am working to update Jav8 to the latest V8 APIs and get it working on 
Windows 32bit.  I am not the maintainer, but I have been unable to contact 
them and need this working.

I am having a problem creating a second Isolate.  The first one works fine, 
but I get a crash when trying to initialize the second one.  Here is the 
error:



#
# Fatal error in v8::HandleScope::CreateHandle()
# Cannot create a handle without a HandleScope
#

The error occurs at:
Context::global_object()   ("this" is NULL)
Context::native_context()
Isolate::native_context()
Execution::InstantiateFunction()
Execution::InstantiateObject()
ObjectTemplate::NewInstance()
env.Wrap()   (See call below)



Here is the init code that runs when the Jav8 DLL is loaded

jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
  v8::V8::InitializeICU();
  v8::Platform* platform = v8::platform::CreateDefaultPlatform();
  v8::V8::InitializePlatform(platform);
  v8::V8::Initialize();

  return JNI_VERSION_1_2;
}


Here is the code that runs to create and init a new Isolate:

jlong JNICALL Java_lu_flier_script_V8Context_internalCreateContext(JNIEnv 
*pEnv, jobject pObj)
{
  jni::Jav8Context* jav8Context = new jni::Jav8Context();
  v8::Isolate* isolate = jav8Context->GetIsolate();
  v8::Isolate::Scope isolateScope(isolate);
  v8::HandleScope handleScope(isolate);
  v8::Handle<v8::Context> ctxt = v8::Local<v8::Context>::New(isolate, 
*jav8Context->GetContext());
  jni::V8Env env(pEnv, jav8Context);
  ctxt->Global()->Set(v8::String::NewFromUtf8(isolate, "__proto__"), 
env.Wrap(pObj));
  return PTR_TO_JLONG(jav8Context);
}


That code uses the following class for some of the init:

    class Jav8Context {
    public:
        Jav8Context() {
            // Create a new Isolate and make it the current one.
            isolate_ = v8::Isolate::New();
            v8::Isolate::Scope isolateScope(isolate_);
            isolate_->Enter();
            v8::HandleScope handleScope(isolate_);
            v8::Handle<v8::Context> ctxt = v8::Context::New(isolate_);
            ctxt->Enter();
            context_ = new v8::Persistent<v8::Context>(isolate_, ctxt);
        }
        ~Jav8Context() {
            context_->Reset();
            isolate_->Exit();
            isolate_->Dispose();
        }
        v8::Isolate* GetIsolate() {return isolate_;}
        v8::Persistent<v8::Context>* GetContext() {return context_;}
    private:
        v8::Isolate* isolate_;
        v8::Persistent<v8::Context>* context_;
    };


Any advice would be greatly appreciated.

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
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 v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to