2013-10-14 69 views
0

我正在將SpiderMonkey嵌入到iOS應用程序中,並且在執行JS_GCJS_MaybeGC時發生斷言失敗。在我的iPhone上進行測試時,它會更頻繁地發生,但它也發生在模擬器中。特別是,斷言失敗是:垃圾收集時斷言失敗

Assertion failure: kind == GetGCThingTraceKind(*thingp), at /Users/rquesada/progs/Spidermonkey/js/src/gc/Marking.cpp:366 

我不太熟悉嵌入SpiderMonkey。我應該在哪裏開始弄清楚並修復這個bug?我的應用程序中只有一個全局對象,一個運行時和一個上下文,並且它們都從主線程運行。

回答

0

原因是我將__block變量傳遞給JS_AddValueRoot。在JS_Add*Root函數對存儲器地址進行操作,和the implementation is such that

__block變量最初分配堆棧上,但如果該引用它們的任何塊被拷貝,它們被移動到堆上(malloced)。

這導致GCer認爲有些東西沒有導致它崩潰。