몇 달 동안 js 1.7.0에서 제대로 작동했지만 몇 가지 커스텀/네이티브 JavaScript 객체가있는 C++ 애플리케이션이 있습니다. SpiderMonkey 24로 업데이트 할 시간을 추가했습니다. 컴파일, 링크 및 실행을 위해 새 라이브러리를 만들고 응용 프로그램을 변경했지만 JS_DestroyContext를 호출 할 때 일관된 오류가 발생했습니다. (it GC 수행 중 충돌). 내가 사용하는 경우 JS_DestroyContextNoGC 내 응용 프로그램이 다른 시간에 메모리 또는 크래시가 누출 될 것이라는 가정하에 (즉, 은 정확한 가정입니까?) 크래시가 발생하지 않습니다. Migrating_to_SpiderMonkey_24 가이드는 여기에 세부 정보를 삽입하는 내용으로되어있어서 특히 도움이되지 않았습니다. 나의 가정은 SpiderMonkey의 새로운 버전이 스레딩과 관련하여 무엇을 요구하는지에 대한 나의 이해 부족과 관련이 있다는 것입니다.js 1.7.0을 SpiderMonkey 24로 마이그레이션 한 후 JS_DestroyContext에 오류가 있음
기본적으로 내 응용 프로그램은 JSRuntime (논리 서비스 당 하나씩)을 만들고 각각의 내부에 관련 JS_NewContext (각 논리 서비스에 대한 연결 당 하나)를 만들고 각각에 몇 가지 사용자 정의 객체를 정의합니다. 응용 프로그램은 다중 스레드이며 컨텍스트의 스크립트는 스레드 풀의 모든 스레드에서 실행할 수 있습니다. 한 번에 동일한 런타임에서 두 컨텍스트가 실행되지 않도록 사용자 지정 잠금을 제공합니다. 스크립트를 실행해야 할 때 사용자 정의 잠금을 수행하고 JSAutoRequest 및 JSAutoCompartment를 사용하여 실행을 추가로 래핑합니다.
1) 내 접근 방식으로 충분합니까? 1b) 한 번에 두 개의 런타임이 활성화되지 않도록 잠글 필요가 있습니까?
2) SpiderMonkey를 --enable-threadsafe로 컴파일하지 않았습니다. (컴파일했을 때 x64에서 NSPR로 컴파일 할 수 없었습니다.) ?
3) (2 차적으로) 성능이 중요하지 않으므로 --disable-ion --disable-yarr-jit로 컴파일했습니다. 모든 JIT를 끄기에 충분합니까? 나는 도서관이 여전히 조금 더 큰 것으로 나타났습니다.
많은 감사는 포인터를 위해 ... 나는