搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

详细了解

why JS_AddValueRoot() leads to "losing efficacy" of GC

  • 2 个回答
  • 1 人有此问题
  • 11 次查看
  • 最后回复者为 blueconch.hg

more options

Here's my js code:

     window.onload = function () {
       ...
       CarObject.addCallback("StringEvent", function(arg1, arg2){
         alert(arg2);
       });
       ...
     }

CarObject is a js variable, it maps to a C++ object internally, here I add a callback to the CarObject. as you see, the callback function is not a global function, so the callback function will be freed by GC. We use JS_AddValueRoot() which will add the callback function to GC's root set, this means the callback function(JSFunction *) will be protected from GC. but I found that it caught GC won't work, many object will be leaked when firefox exit.

Here's my js code: window.onload = function () { ... CarObject.addCallback("StringEvent", function(arg1, arg2){ alert(arg2); }); ... } CarObject is a js variable, it maps to a C++ object internally, here I add a callback to the CarObject. as you see, the callback function is not a global function, so the callback function will be freed by GC. We use JS_AddValueRoot() which will add the callback function to GC's root set, this means the callback function(JSFunction *) will be protected from GC. but I found that it caught GC won't work, many object will be leaked when firefox exit.

所有回复 (2)

more options

hello blueconch.hg, could you file a bug report for that issue at bugzilla.mozilla.org there it will get the attention of developers quicker! thank you...

more options

thanks philipp, I'm using source code of fennec21.0, I'm not sure whether it will occur on the lasted version. The problem(GC losing effective, there will be many leads when fennec exit.) may not be caught by JS_AddValueRoot(), maybe it's our code's problem. But I will try your suggestion, put it to https://bugzilla.mozilla.org/