- From: Charles Pritchard <chuck@jumis.com>
- Date: Mon, 05 Mar 2012 17:04:14 -0800
- To: Glenn Maynard <glenn@zewt.org>
- CC: Feras Moussa <ferasm@microsoft.com>, "public-webapps@w3.org" <public-webapps@w3.org>, Adrian Bateman <adrianba@microsoft.com>
- Message-ID: <4F55628E.2040704@jumis.com>
On 3/5/2012 3:59 PM, Glenn Maynard wrote:
> On Fri, Mar 2, 2012 at 6:54 PM, Feras Moussa <ferasm@microsoft.com
> <mailto:ferasm@microsoft.com>> wrote:
>
> To address this issue, we propose that a close method be added to
> the Blob
>
> interface.
>
> When called, the close method should release the underlying
> resource of the
>
> Blob, and future operations on the Blob will return a new error, a
> ClosedError.
>
> This allows an application to signal when it's finished using the
> Blob.
>
>
> This is exactly like the "neuter" concept, defined at
> http://dev.w3.org/html5/spec/common-dom-interfaces.html#transferable-objects.
> I recommend using it. Make Blob a Transferable, and have close()
> neuter the object. The rest of this wouldn't change much, except
> you'd say "if the object has been neutered" (or "has the neutered flag
> set", or however it's defined) instead of "if the close method has
> been called".
>
> Originally, I think it was assumed that Blobs don't need to be
> Transferable, because they're immutable, which means you don't
> (necessarily) need to make a copy when transferring them between
> threads. That was only considering the cost of copying the Blob,
> though, not the costs of delayed GC that you're talking about here, so
> I think transferable Blobs do make sense.
>
> Also, the close() method should probably go on Transferable (with a
> name less likely to clash, eg. "neuter"), instead of as a one-off on
> Blob. If it's useful for Blob, it's probably useful for ArrayBuffer
> and all other future Transferables as well.
>
Glenn,
Do you see old behavior working something like the following?
var blob = new Blob("my new big blob");
var keepBlob = blob.slice();
destination.postMessage(blob, '*', [blob]); // is try/catch needed here?
blob = keepBlob; // keeping a copy of my blob still in thread.
Sorry to cover too many angles: if Blob is Transferable, then it'll
neuter; so if we do want a local copy, we'd use slice ahead of time to
keep it.
And we might have an error on postMessage stashing it in the transfer
array if it's not a Transferable on an older browser.
The new behavior is pretty easy.
var blob = new Blob("my big blob");
blob.close(); // My blob has been neutered before it could procreate.
-Charles
Received on Tuesday, 6 March 2012 01:04:38 UTC