I have a scenario that I had to remove compartment check from the original API.
1 - There is a JavaScript code runs under "Context A". This code creates inner
"Context B" wrapped into a "JSObject B".
2 - GC somehow starts collecting under "Context A". And then it comes to
"JSObject B".
At this point, I unwrap "Context B" from "JSObject B". So, right at this
moment, I have to call JS_Destroy / JS_DestroyNoGC on "Context B" in order to
prevent the "LinkedList" breaking during JS_DestroyRuntime.
The problem is the actual compartment is still under 'Context A' and both of
the options fail.
JS_PUBLIC_API(void)
JS_DestroyContext(JSContext *cx)
{
---> JS_ASSERT(!cx->compartment());
DestroyContext(cx, DCM_FORCE_GC);
}
And there is no option to enter a compartment when the GC is collecting.
As a temporary solution, I have an alternative method that skips the check but
I'm wondering what could go wrong ? or is there a better way to overcome this
situation.
_______________________________________________
dev-tech-js-engine-internals mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals