我在一个iOS应用程序中嵌入SpiderMonkey,在执行JS_GC
和JS_MaybeGC
时遇到断言失败。在我的iPhone上进行测试时会更频繁地发生这种情况,但它也会在模拟器中发生。特别是,断言失败是:
Assertion failure: kind == GetGCThingTraceKind(*thingp), at /Users/rquesada/progs/Spidermonkey/js/src/gc/Marking.cpp:366
我不太熟悉嵌入SpiderMonkey。我应该在哪里开始搞清楚并修复这个错误?我的应用程序中只有一个全局对象,一个运行时和一个上下文,它们都是从主线程运行的。
答案 0 :(得分:0)
原因是我将__block
变量传递给JS_AddValueRoot
。 JS_Add*Root
函数对内存地址和the implementation is such that:
__块变量最初是在堆栈上分配的,但如果复制了引用它们的任何块,它们将被移动到堆上(malloced)。
这导致GCer认为有些东西没有导致它崩溃。