On Fri, May 11, 2018 at 7:36 PM, <jer...@fly.io> wrote: > I've been wondering if it's possible to concurrently use v8::Locker. > > I'm binding to v8 from a single-threaded language that uses fibers for > concurrency (Crystal.) Since it's a single thread, v8::Locker is always > instantly available. > > This seems fine, the bigger issue if with Context::Scope. > > I'm concurrently entering and exiting the same context from multiple fibers > and I keep stumbling upon: > > # > # Fatal error in v8::Context::Exit() > # Cannot exit non-entered context > # > > Which came to make sense to me. I'm passing around a pointer to a > Persistent<Context>. In the function I concurrently access, I'm getting the > Local from it (with the isolate) and creating a Context::Scope. The same > Local<Context> might be exited more than once. I expect Enter is a noop if > the Context has already been entered.
It isn't. Enter() and Exit() calls need to match up. > My fix was to use a fiber-safe mutex to only allow one isolate locking and > context scoping at any given time. > > Is this normal? Any way around it? You may want to take a look at node-fibers. It uses a thread-local storage hack to trick V8 into supporting fibers. https://github.com/laverdet/node-fibers/blob/4786aef736ab8285d29e9476e3615abbd3935d37/src/coroutine.cc#L76-L123 -- -- 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.