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
[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.