On Sun, Jun 6, 2010 at 10:04 AM, Starlon <[email protected]> wrote: > I figured it out. I needed to close out the handle scope in > function_cos.
In this particular case, I would recommend just getting rid of the HandleScope in function_cos instead. All C++ callbacks run in their own HandleScope provided by V8, so it's really not needed here. Cheers, Kasper > On Jun 6, 1:29 am, Starlon <[email protected]> wrote: >> I'm not sure what in the world's causing this crash. The stack trace >> from gdb isn't much help. >> >> Program received signal SIGSEGV, Segmentation fault. >> 0x003a2ab9 in ?? () >> (gdb) bt >> #0 0x003a2ab9 in ?? () >> #1 0x003a2a94 in ?? () >> #2 0xb6072389 in ?? () >> #3 0x0baddead in ?? () >> #4 0x003a29e1 in ?? () >> #5 0x0000000a in ?? () >> >> Valgrind gives a little more info; >> >> ==14169== Invalid read of size 4 >> ==14169== at 0x4B1C599: ??? >> ==14169== by 0x4B1C95D: ??? >> ==14169== by 0x4B02CDA: ??? >> ==14169== by 0x4B022E1: ??? >> ==14169== by 0x480E21A: v8::internal::Invoke(bool, >> v8::internal::Handle<v8::internal::JSFunction>, >> v8::internal::Handle<v8::internal::Object>, int, >> v8::internal::Object***, bool*) (execution.cc:94) >> ==14169== by 0x480E306: >> v8::internal::Execution::Call(v8::internal::Handle<v8::internal::JSFunction>, >> v8::internal::Handle<v8::internal::Object>, int, >> v8::internal::Object***, bool*) (execution.cc:121) >> ==14169== by 0x47D01D6: v8::Script::Run() (api.cc:1242) >> ==14169== by 0x47CAE02: scope_run(SuperScopePrivate*, >> scope_runnable) (actor_avs_superscope.cpp:190) >> ==14169== by 0x47CC0BC: lv_superscope_render >> (actor_avs_superscope.cpp:499) >> ==14169== by 0x402FCB0: visual_actor_run (lv_actor.c:777) >> ==14169== by 0x4072EEF: pipeline_container_run (lvavs_pipeline.c: >> 506) >> ==14169== by 0x40725EE: lvavs_pipeline_run (lvavs_pipeline.c:209) >> ==14169== Address 0xbaddeac is not stack'd, malloc'd or (recently) >> free'd >> >> Here's the script that's being run when the crash happens: >> d=i+v*0.2; r=t+i*PI*4; x=cos(r)*d; y=sin(r)*d >> >> It crashes right before assigning x. >> >> Here's where I compile and run the script: >> int scope_load_runnable(SuperScopePrivate *priv, ScopeRunnable >> runnable, char *buf) >> { >> printf("buf ------- %s %d\n", buf, (int)runnable); >> HandleScope handle_scope; >> >> Handle<Context> context = Context::New(NULL, priv->global); >> Context::Scope context_scope(context); >> Handle<String> source_obj = String::New(buf); >> Persistent<Script> script = >> Persistent<Script>::New(Script::Compile(source_obj)); >> priv->runnable[runnable] = script; >> >> return 0; >> >> } >> >> int scope_run(SuperScopePrivate *priv, ScopeRunnable runnable) >> { >> printf("scope_run ---------- %d\n", (int)runnable); >> HandleScope handle_scope; >> >> Handle<Context> context = Context::New(NULL, priv->global); >> Context::Scope context_scope(context); >> priv->runnable[runnable]->Run(); >> >> return 0; >> >> } >> >> Here's the getter and setter: >> #define GETTER(name) \ >> static Handle<Value> prop_getter_##name(Local<String> property, >> const AccessorInfo &info) { \ >> Handle<Value> obj(*info.Data()); \ >> SuperScopePrivate *priv = (SuperScopePrivate >> *)External::Unwrap(obj); \ >> printf("getter for %s = %f\n", *String::Value(property), >> priv->name); \ >> >> return Number::New(priv->name); \ >> } >> >> #define SETTER(name) \ >> static void prop_setter_##name(Local<String> property, >> Local<Value> val, const AccessorInfo &info) { \ >> Handle<Value> obj(*info.Data()); \ >> SuperScopePrivate *priv = (SuperScopePrivate >> *)External::Unwrap(obj); \ >> priv->name = val->ToNumber()->Value(); \ >> printf("setter for %s = %f\n", *String::Value(property), >> priv->name);\ >> >> } >> >> Here's cos: >> static Handle<Value> function_cos(const Arguments &args) >> { >> printf("function_cos\n"); >> HandleScope handle_scope; >> >> if (args.Length() != 1) >> return v8::Undefined(); >> >> Handle<Value> val = Number::New(log(args[0]->NumberValue())); >> >> return val; >> >> } >> >> And here's some output: >> getter for i = 0.000000 >> getter for v = 0.199020 >> setter for d = 0.039804 >> getter for t = -0.050000 >> getter for i = 0.000000 >> getter PI >> function_cos >> getter for d = 0.039804 > > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
