Verónica Villanueva
unread,Oct 2, 2012, 1:16:29 PM10/2/12Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to v8-u...@googlegroups.com
Hi!
I'm trying to develop a program using threads. According to the things I've read, the way I can create a critical section in my code is by using "isolate" and "locker".
I will show you my code below, so you can see what I'm trying to do.
Sadly, this line "v8::Handle<Value> notifyFrameEvent_val = context_->Global()->Get(notifyFrameEvent_name)" is getting a segmentation fault, so I'm confuse about how I should use isolate, locker and context.
Thanks in advance,
Vero
void notifyFrameEvent()
{
v8::Isolate* isolate = v8::Isolate::New();
Persistent<v8::Context> context;
{
v8::Locker locker(isolate);
v8::Isolate::Scope isolate_scope(isolate);
isolate->Enter();
// Create a handle scope to keep the temporary object references.
v8::HandleScope handle_scope;
// Enter the new context so all the following operations take place within it.
v8::Context::Scope context_scope(context_);
v8::Handle<String> notifyFrameEvent_name = v8::String::New("notifyFrameEvent");
v8::Handle<Value> notifyFrameEvent_val = context_->Global()->Get(notifyFrameEvent_name);
// If there is no notifyFrameEvent function, or if it is not a function, bail out
if (!notifyFrameEvent_val->IsFunction()){
while (v8::Isolate::GetCurrent() == isolate) {
isolate->Exit();
}
isolate->Dispose();
return ;
}
//Obtain the notifyFrameEvent
notifyFrameEvent_= getNotifyFrameEvent();
// Wrap the C++ request object in a JavaScript wrapper
// Set up an exception handler before calling the Process function
TryCatch try_catch;
// Invoke the process function, giving the global object as 'this' and one argument, the request.
const int argc =0;
v8::Handle<Value> argv[argc]={};
v8::Handle<Value> result = notifyFrameEvent_->Call(context_->Global(), argc, argv);
if (result.IsEmpty()) {
String::Utf8Value error(try_catch.Exception());
ScriptingGeneral *sg= new ScriptingGeneral();
sg->Log(*error);
}
while (v8::Isolate::GetCurrent() == isolate) {
isolate->Exit();
}
isolate->Dispose();
}
return;
}