So it looks like it was a problem with the context. I tries adding a JSValueProtect and that didn't help, and then I switched to calling the function using the global context instead of the context passed to the 'setTickFunction' callback and that fixed the problem.
So it's working, which is great, but I still don't understand what the issue was exactly. Is there any documentation on how contexts work, and/or rules of thumb on how to use them safely? -Spencer On Mon, Feb 18, 2013 at 2:20 AM, Arunprasad Rajkumar <ararunpra...@gmail.com > wrote: > May be reference count issue? Try to increase the reference count of the > cached function using JSValueProtect. While cleanup the cached object > use JSValueUnprotect. > > On 18 February 2013 11:18, Spencer Kohan <spencerko...@gmail.com> wrote: > >> I'm working on a simple application where a few JS functions are cached >> during setup and then called repeatedly on a timer. I'm getting a failed >> assertion when the cached script is called, and I don't know how to debug >> it. >> >> So my C application looks something like this: >> >> static JSContextRef cachedFunctionContext; >> >> static JSObjectRef cachedFunction; >> >> //this callback caches the 'tick' function defined in the setup script >> >> JSValueRef setTickFunctionCallback(JSContextRef ctx, JSObjectRef >> function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef >> arguments[], JSValueRef *exception){ >> >> cachedFunction = arguments[0]; >> >> cachedFunctionContext = ctx; >> >> JSValueProtect(ctx, cachedFunction); >> >> return JSValueMakeNull(ctx); >> >> } >> >> //this function runs the setup script >> >> void setup(const char* setupScript){ >> >> //setup context and native callbacks >> >> JSEvaluateScript(context, scriptJS, NULL, NULL, 0, NULL); >> >> } >> >> //this function is called on a timer >> >> void tick(){ >> >> JSObjectCallAsFunction(cachedFunctionContext, cachedFunction, >> NULL, 0, NULL, NULL); >> >> } >> >> And my setup script looks something like this: >> >> var setup = function() { >> >> setTickFunction(function(){ >> >> //do something >> >> }); >> >> } >> >> setup(); >> >> But during execution, I get this assertion failure I don't know how to >> interpret: >> >> *ASSERTION FAILED: callFrame->frameExtent() <= oldEnd || callFrame == >> callFrame->scopeChain()->globalObject->globalExec()* >> >> Any insight into what I might be doing wrong would be greatly appreciated. >> >> _______________________________________________ >> webkit-help mailing list >> webkit-help@lists.webkit.org >> https://lists.webkit.org/mailman/listinfo/webkit-help >> >> > > > -- > *Arunprasad Rajkumar* > http://in.linkedin.com/in/ararunprasad > -- Spencer Kohan cell: 216 288 8258
_______________________________________________ webkit-help mailing list webkit-help@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-help