I figured it out. I needed to close out the handle scope in function_cos. 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
