Join us to show up for other Firefox users 🦊. Earn fun badges and Mozilla swag vouchers! Find out more: https://mzl.la/askafox150

Windows 10 reached EOS (end of support) on October 14, 2025. If you are on Windows 10, see this article.

Pretraži podršku

Izbjegni prevare podrške. Nikad te nećemo tražiti da nas nazoveš, da nam pošalješ telefonski broj ili da podijeliš osobne podatke. Prijavi sumnjive radnje pomoću opcije „Prijavi zlouporabu”.

Saznaj više

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

  • 2 odgovora
  • 1 ima ovaj problem
  • 74 prikaza
  • Posljednji odgovor od blueconch.hg
  • Arhivirano

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.

Svi odgovori (2)

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...

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/