将JS 1.7.0迁移到SpiderMonkey 24后,JS_DestoryContext中出现错误
fault in JS_DestroyContext after migrating js 1.7.0 to SpiderMonkey 24
我有一个C++应用程序,它有几个自定义/本地JavaScript对象,多年来一直在js 1.7.0上运行良好,但鉴于已经添加的所有新功能,是时候更新到SpiderMonkey 24了。我已经构建了新的库,并对我们的应用程序进行了必要的更改(以便它编译、链接和运行),但我在调用JS_DestoryContext时遇到了一致的错误(它在执行GC时崩溃)。如果我使用JS_DestoryContentNoGC,我不会得到崩溃,尽管我认为这意味着我的应用程序将在其他时间泄漏内存或崩溃(这个假设准确吗?)。Migrating_to_SpiderMonkey_24指南中充斥着。。。在此处插入详细信息。。。所以这并没有特别大的帮助。我的假设是,这个错误与我不了解新版SpiderMonkey在线程方面的要求有关。
基本上,我的应用程序创建了一堆JSRuntime(每个逻辑服务一个),在每个JSRuntime中创建了一组相关的JS_NewContext(每个到逻辑服务的连接一个)并在每个JS_NewContext中定义了一些自定义对象。应用程序是多线程的,上下文上的脚本可以在线程池中的任何线程上运行。我提供了自定义锁定,这样在任何时候都不会有两个上下文在同一运行时中执行。当脚本需要运行时,我会执行自定义锁定,并使用JSAutoRequest和JSAutoCompartment包装执行。
1) 我的方法足够吗?1b)我是否必须锁定,以便同时没有两个运行时处于活动状态?
2) 我没有用--enable threadsafe编译SpiderMonkey(当我这样做的时候,我无法在x64上用NSPR编译它,它确实编译得很好)。。。考虑到我的使用,这是必需的吗?
3) (其次)性能不是关键的,所以我用--disable-ion--disable-yarr-jit编译了它;这足以关闭所有JIT吗?我注意到图书馆还是大了一点。
非常感谢你的指点。。。我不想回到1.7.0…
仅回答第二个问题:
线程安全是默认构建的(自1.8.x版本以来):
•"最近删除了对JS_THREADSAFE的支持,现在默认启用线程安全构建。">
https://developer.mozilla.org/en-US/docs/SpiderMonkey/Build_Documentation#Building_your_application
- JS相等运算符(如===)是否可以使用embind类型
- 在 ubuntu 上安装 node js pulsar 客户端
- 如何在 Arduino 字符串的开头添加元素.类似于 JS unshift();
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 如何在 Cheerp/js 中迭代动态命名的对象?
- 如何与 Cheerp/js 中的 extern 变量接口?
- 在 node.js 中将缓冲区从 C++ 转换为 UTF-8 字符串
- glfw 的基本设置会导致与 emscripten 生成的 js 文件中的事件侦听器有关的运行时错误
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 使用 Node.js N-API 调用 C 函数时,不会显示预期的输出
- 将数据从 OpenCV C++传递到 NodeJS/JS |电子
- C++ - 实现JS的setTimeout的现代方法
- 节点.js HTTP 无法通过套接字接收来自C++客户端的请求
- 如何使用 v8 本机插件将 C++ 数组交付到 Node.js
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- 有没有类似的函数,比如 c++ 中的 JS Array.prototype.map?
- C++ 和 node.js 之间的 RSA 加密
- 从C++回调函数发出节点.js事件
- node.js Nan:在函数C++调用 JavaScript 回调
- 迭代 Napi::对象属性(键)在 Node.js C++ N-API 中