Isolate, Locker and Context

159 views
Skip to first unread message

Verónica Villanueva

unread,
Oct 2, 2012, 1:16:29 PM10/2/12
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;

}

Reply all
Reply to author
Forward
0 new messages