ошибка в JS_DestroyContext после миграции js 1.7.0 в SpiderMonkey 24

У меня есть приложение C ++ с несколькими пользовательскими / нативными объектами JavaScript, которое отлично работало на js 1.7.0 в течение многих лет, но в свете всех новых функций, которые были добавлены, пришло время обновить SpiderMonkey 24. Я создал новый библиотека и внесла необходимые изменения в наше приложение (для его компиляции, связывания и запуска), но Я сталкиваюсь с постоянными ошибками при вызове JS_DestroyContext (он падает, делая GC). Если я использую JS_DestroyContextNoGC Я не получаю сбоев, хотя я предполагаю, что это означает, что мое приложение будет либо утечка памяти или сбой в другое время (это предположение верно?). Руководство Migrating_to_SpiderMonkey_24 изобилует … вставьте детали сюда … так что это не было особенно полезно. Я предполагаю, что ошибка связана с моим непониманием того, что требует новая версия SpiderMonkey для многопоточности.

По сути, мое приложение создает группу JSRuntime (по одному на логическую службу), а внутри каждого создает группу связанных JS_NewContext (по одному на соединение с каждой логической службой) и определяет несколько пользовательских объектов в каждой. Приложение является многопоточным, и сценарии в контексте могут выполняться в любом потоке из пула потоков. Я предоставляю настраиваемую блокировку таким образом, чтобы ни один контекст не выполнялся одновременно в одной и той же среде выполнения. Когда скрипт требует выполнения, я делаю пользовательскую блокировку и дополнительно обертываю выполнение с помощью JSAutoRequest и JSAutoCompartment.

1) Достаточен ли мой подход?
1b) Нужно ли блокировать, чтобы одновременно не было активных двух сред выполнения?

2) Я не скомпилировал SpiderMonkey с —enable-threadsafe (и когда я это сделал, я не смог заставить его скомпилировать с NSPR на x64, что скомпилировалось нормально) … это требуется для моего использования?

3) (во-вторых) производительность не критична, поэтому я скомпилировал ее с помощью —disable-ion —disable-yarr-jit; Этого достаточно, чтобы отключить все JIT? Я заметил, что библиотека все еще немного больше.

Большое спасибо за любые указатели … Я бы не хотел возвращаться к 1.7.0 …

0

Решение

ответ только на 2-й вопрос:

потокобезопасные сборки по умолчанию (начиная с версии 1.8.x):

• «Поддержка JS_THREADSAFE была недавно удалена, и теперь безопасные сборки включены по умолчанию».

https://developer.mozilla.org/en-US/docs/SpiderMonkey/Build_Documentation#Building_your_application

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]