Hi, have you tried building it in debug mode and see if there are any useful messages? I suspect that having multiple threads running Context::New concurrently is the problem. If you refer to Shell::CreateEvaluationContext() in src/d8.cc, you can see that it's protected by a mutex. I hope this helps.
Yang On Jan 26, 5:48 am, Juwon Lee <[email protected]> wrote: > Hi all > > I am new to v8. > and I'm trying to make some test codes. > > Below is my test code. > It crashes sometimes when executing Context::New function. > Could someone please let me know what the problem is? > > #include "stdafx.h" > #include "v8.h" > #include <process.h> > #include <windows.h> > > using namespace v8; > > static Handle<Value> Print(const Arguments& args) > { > if (!args.Length()) > return Undefined(); > HandleScope scope; > Handle<Value> arg = args[0]; > String::AsciiValue ascii(arg); > printf("%s\n", *ascii); > return Undefined(); > > } > > void __cdecl th(void *arg) > { > Isolate *isolate = Isolate::New(); > { > Isolate::Scope isolate_scope(isolate); > > HandleScope handle_scope; > char code[1024]; > sprintf(code, "print('thread %d(1)');print('thread %d(2)');", (int)arg, > (int)arg); > Handle<ObjectTemplate> global = ObjectTemplate::New(); > global->Set(String::New("print"), FunctionTemplate::New(Print)); > Persistent<Context> context = Context::New(NULL, global); > { > Context::Scope context_scope(context); > > Handle<String> source = String::New(code); > Handle<Script> script = Script::Compile(source); > > while(1) > Handle<Value> result = script->Run(); > > } > > context.Dispose(); > > } > isolate->Dispose(); > } > > int _tmain(int argc, _TCHAR* argv[]) > { > _beginthread(th, 0, (void *)1); > _beginthread(th, 0, (void *)2); > _beginthread(th, 0, (void *)3); > _beginthread(th, 0, (void *)4); > while (1) > Sleep(10000); > return 0; > > > > > > > > } -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
