On Tuesday, February 11, 2014 2:47:48 AM UTC-8, Ben Noordhuis wrote:
>
> On Tue, Feb 11, 2014 at 12:11 AM, Geoff Morrison 
> <[email protected]<javascript:>> 
> wrote: 
> > I'm trying to Enter a Context in one Locker, then use it in another: 
> > 
> >         v8::Isolate *isolate = v8::Isolate::New(); 
> >         { 
> >                 v8::Locker locker(isolate); 
> >                 isolate->Enter(); 
> >         } 
> > 
> >         v8::Persistent<v8::Context> pctxt; 
> >         { 
> >                 v8::Locker locker(isolate); 
> >                 v8::HandleScope handleScope(isolate); 
> >                 v8::Local<v8::Context> ctxt = v8::Context::New(isolate); 
> >                 ctxt->Enter(); 
> >                 pctxt.Reset(isolate, ctxt); 
> >         } // Error occurs here, on locker dtor 
> > 
> >         { 
> >                 v8::Locker locker(isolate); 
> >                 v8::HandleScope handleScope(isolate); 
> >                 v8::Local<v8::Context> ctxt = 
> > v8::Local<v8::Context>::New(isolate, pctxt); 
> >                 ctxt->Exit(); 
> >         } 
> > 
> > This causes an assertion failure in a debug build: 
> > # Fatal error in ../src/api.h, line 577 
> > # CHECK(entered_contexts_.length() == 0) failed 
> > and a fatal error in a release build: 
> > # Fatal error in v8::Context::Exit() 
> > # Cannot exit non-entered context 
> > 
> > The assertion fails because the dtor of a top-level Locker releases 
> > thread-local resources, which includes the list of entered contexts. 
> > 
> > I'm able to work around this by heap-allocating a Locker/Unlocker pair 
> after 
> > entering the isolate (before the declaration of pctxt): 
> >         v8::Locker *toplock = new v8::Locker(isolate); 
> >         v8::Unlocker *topunlock = new v8::Unlocker(isolate); 
> > and deleting them when I dispose of the isolate, but this is ugly and 
> goes 
> > counter to the way I see these APIs being used. 
> > 
> > Is there a better way to solve this problem? 
>
> Hi Geoff, is there a reason you cannot (or don't want to) exit the 
> Context before unlocking the isolate again?  Do you need Lockers and 
> Unlockers in the first place? 
>

I want to be able to run a script against a context, then access values out 
of that context later.

This is actually working fine without Locker/Unlocker, but I'm adding 
Lockers so I can add debugger support: 
http://code.google.com/p/v8/wiki/AddDebuggerSupport

-- 
-- 
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/groups/opt_out.

Reply via email to