W3C home > Mailing lists > Public > whatwg@whatwg.org > June 2014

Re: [whatwg] BroadcastChannel memory leak

From: Ian Hickson <ian@hixie.ch>
Date: Fri, 6 Jun 2014 21:37:18 +0000 (UTC)
To: Adam Barth <w3c@adambarth.com>, Michael Nordman <michaeln@google.com>, Jonas Sicking <jonas@sicking.cc>
Message-ID: <alpine.DEB.2.00.1406062127300.25748@ps20323.dreamhostps.com>
Cc: whatwg <whatwg@lists.whatwg.org>
On Fri, 23 May 2014, Adam Barth wrote:
>
> When is it safe for a user agent to garbage collect a BroadcastChannel 
> instance?
> 
> http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts

When there's no strong references to it from an object that itself can't 
be GC'ed. Per the spec: "While a BroadcastChannel object has an event 
listener registered for message events, there must be a strong reference 
from global object specified by the BroadcastChannel object's 
BroadcastChannel settings object to the BroadcastChannel object itself."


> Given that another document might create a new BroadcastChannel instance 
> at any time, the |message| event of the object might fire any time its 
> responsible document is fully active.  For web application that have 
> long-lived documents, the BroadcastChannel might not be eligible for 
> garbage collection for a long time.

Yeah. If the page doesn't keep an explicit reference to it, but does 
attach an event handler, it could be around forever.


> Proposal: Add a |close| method to the BroadcastChannel interface similar 
> to the |close| method on MessagePort.  The |close| method would just 
> neuter the instance of the channel and prevent it from receiving further 
> messages.

This would merely be a convenience method (you could always just remove 
the event handlers), but it seems reasonable.


On Fri, 23 May 2014, Adam Barth wrote:
> 
> That doesn't play nicely with anonymous JavaScript functions that can't 
> ever be removed as event listeners...

Well, they can remove themselves (no?). But yeah, it's not great.


On Fri, 23 May 2014, Jonas Sicking wrote:
> >
> > Proposal: Add a |close| method to the BroadcastChannel interface 
> > similar to the |close| method on MessagePort.  The |close| method 
> > would just neuter the instance of the channel and prevent it from 
> > receiving further messages.
> 
> Sounds good to me.

Done.

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'
Received on Friday, 6 June 2014 21:37:56 UTC

This archive was generated by hypermail 2.3.1 : Monday, 13 April 2015 23:09:29 UTC