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

Reply via email to