timeless%mozdev.org 4b89f5e047 Bug 421303 Crash [@ jsds_ScriptHookProc]
r=caillon a=dsicore

If we reach ~jsdService, that means our client doesn't care about us, so we can
(and should) drop all references to any callbacks (if they cared, they'd have
kept us alive!*).

I think jsdService::Off should clear all the hooks, the strange magic of not
clearing it isn't really a great idea. So for Off, we'll now clear the
ScriptHook too (consumers who use off should really drop any references they
have to our objects...). I'm still on the fence on this point, I suspect we can
actually move it from ::Off to ~jsdService (it must be cleared at some point,
otherwise if jsd_xpc's library manages to get unloaded, the function pointer
would be invalid, which would be *BAD*).

jsds_NotifyPendingDeadScripts needs to clear gDeadScripts whether or not
there's a service or hooks, so it does. Because it's a static callback and
because of the scary way GC works, I'd rather ensure (deathgrip) that jsds is
available (and consistent!) for the duration of the function call. The code
already handles the lack of a hook, so there's no reason to do magical
returns....

The real problem which mayhemer found was that jsdService::Off was returning
early (failure) because gGCStatus wasn't JSGC_END when called from ~jsdService
from JS_GC from the cyclecollector, so we make sure that ~jsdService forces
::Off to act as if it is JSGC_END (after ensuring that there are no callbacks
available).

* a pure javascript (xpcom component, not DOM hosted!) version of a jsdService
consumer means that jsdService will need to talk to the CycleCollector
eventually (this is another bug for the future).


git-svn-id: svn://10.0.0.236/trunk@247513 18797224-902f-48f8-a5cc-f745e15eee43
2008-03-11 00:13:48 +00:00
..
2008-02-26 15:07:05 +00:00

js/jsd contains code for debugging support for the C-based JavaScript engine 
in js/src.  jsd_xpc.cpp provides an XPCOM binding for the library.

js/jsd/jsdb is a console debugger using only native code (see README in that 
directory.)  This debugger is no longer being actively developed, though it
should work.