[tor-bugs] #29334 [Applications/Tor Browser]: Exception when running the garbage collection during new identity

Tor Bug Tracker & Wiki blackhole at torproject.org
Tue Feb 5 09:59:48 UTC 2019


#29334: Exception when running the garbage collection during new identity
-------------------------------------+-------------------------------------
     Reporter:  gk                   |      Owner:  tbb-team
         Type:  defect               |     Status:  new
     Priority:  Medium               |  Milestone:
    Component:  Applications/Tor     |    Version:
  Browser                            |   Keywords:  tbb-torbutton, tbb-
     Severity:  Normal               |  newnym
Actual Points:                       |  Parent ID:
       Points:                       |   Reviewer:
      Sponsor:                       |
-------------------------------------+-------------------------------------
 During `New Identity` we run some fancy code to make sure we are really
 have a clean state after closing and reopening the browser:
 {{{
   // Run garbage collection and cycle collection after window is gone.
   // This ensures that blob URIs are forgotten.
   window.addEventListener("unload", function (event) {
     torbutton_log(3, "Initiating New Identity GC pass");
     // Clear out potential pending sInterSliceGCTimer:
     m_tb_domWindowUtils.runNextCollectorTimer();

     // Clear out potential pending sICCTimer:
     m_tb_domWindowUtils.runNextCollectorTimer();

     // Schedule a garbage collection in 4000-1000ms...
     m_tb_domWindowUtils.garbageCollect();

     // To ensure the GC runs immediately instead of 4-10s from now, we
 need
     // to poke it at least 11 times.
     // We need 5 pokes for GC, 1 poke for the interSliceGC, and 5 pokes
 for CC.
     // See nsJSContext::RunNextCollectorTimer() in
     // https://mxr.mozilla.org/mozilla-
 central/source/dom/base/nsJSEnvironment.cpp#1970.
     // XXX: We might want to make our own method for immediate full GC...
     for (let poke = 0; poke < 11; poke++) {
        m_tb_domWindowUtils.runNextCollectorTimer();
     }

     // And now, since the GC probably actually ran *after* the CC last
 time,
     // run the whole thing again.
     m_tb_domWindowUtils.garbageCollect();
     for (let poke = 0; poke < 11; poke++) {
        m_tb_domWindowUtils.runNextCollectorTimer();
     }
 }}}
 That leads to an exception in `chrome://extensions/content/ext-tabs-
 base.js` in some cases at
 {{{
 get frameLoader() {
     return this.browser.frameLoader;
 }}}
 as it is not guaranteed that `browser` is still a thing during that
 operation. An example where this occurs is

 1) On `about:page` open the link to our newsletter in a new tab
 2) Open the browser console
 3) Hit `New Identity`

 This got reported on our blog
 https://blog.torproject.org/comment/279507#comment-279507 ff.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/29334>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list