【问题标题】:fault in JS_DestroyContext after migrating js 1.7.0 to SpiderMonkey 24将 js 1.7.0 迁移到 SpiderMonkey 24 后 JS_DestroyContext 出现故障
【发布时间】:2014-02-07 20:38:37
【问题描述】:

我有一个 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) 我没有使用 --enable-threadsafe 编译 SpiderMonkey(当我编译时,我无法在 x64 上使用 NSPR 编译它,它确实编译正常)...考虑到我的使用情况,这是必需的吗?

3) (其次)性能并不重要,所以我确实使用 --disable-ion --disable-yarr-jit 编译它;这足以关闭所有 JIT 吗?我注意到图书馆还是有点大。

非常感谢任何指点...我不想不得不恢复到 1.7.0...

【问题讨论】:

    标签: c++ spidermonkey


    【解决方案1】:

    只回答第二个问题:

    默认情况下正在构建线程安全(从版本 1.8.x 开始):

    • “最近删除了对 JS_THREADSAFE 的支持,现在默认启用线程安全构建。”

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      • 2022-06-20
      • 2019-08-08
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多