2013-10-14 4 views
0

iOS 앱에 SpiderMonkey를 임베드하고 JS_GCJS_MaybeGC 일 때 어설 션 오류가 발생합니다. 그것은 내 iPhone에서 테스트 할 때 더 자주 발생하지만 시뮬레이터에서도 발생합니다. 특히 어설 션 오류는 다음과 같았습니다.가비지 수집시 어설 션 오류

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

나는 SpiderMonkey를 퍼뜨리는 데 너무 익숙하지 않습니다. 이 버그를 파악하고 수정하려면 어디에서보아야합니까? 필자는 하나의 전역 개체, 하나의 런타임 및 하나의 컨텍스트를 내 응용 프로그램에 가지고 있으며, 모든 스레드는 주 스레드에서 실행 중입니다.

답변

0

이유는 __block 변수를 JS_AddValueRoot으로 전달했기 때문입니다. JS_Add*Root 함수 메모리 어드레스상에서 동작하고 the implementation is such that :

__block 변수는 초기 스택에 할당되지만, 그것들을 참조하는 블록이 복사되면, 그들은 힙 (malloc으로 할당) 상으로 이동된다.

이것은 GCer가 충돌을 일으키지 않은 무언가가 있다고 생각하게 만들었습니다.