function rotateStreamHelper(weakRes, interval, format) {
let timer = setInterval(() => setStream(weakRes.get(), format),
interval);
weakRes.register(() => clearInterval(timer));
}
function rotateStream(interval, format) {
const res = {};
setStream(res, format);
rotateStreamHelper(new WeakRef(res), interval, format);
// Return a strong reference
return res;
}
Given
http://wiki.ecmascript.org/doku.php?id=strawman:weak_references
does this implement your intention?
On Mon, Sep 7, 2015 at 10:53 AM, Isiah Meadows <[email protected]>
wrote:
> It's replacing the prototype of a stream periodically to point to a new
> writable file output stream pointing to a new file, but I want to kill the
> interval timer when the object is garbage collected.
>
> Something like this:
>
> 1. Create new stream.
> 2. Point it to a log file.
> 3. Every tick on a given interval, do this:
> 3.1. Change the destination of the stream to a new log file.
> 4. When the stream itself is GC'd, do this:
> 4.1. Clear the timer.
> 4.2. Clear all local references to both the timer and the stream.
> 5. Return the stream.
>
> The catch is that I don't want the stream strongly referenced in any local
> closures because it would end up never being collected - there would always
> be an active strong reference to it. I don't think a
> `Reflect.onOnlyOneReferenceLeft(obj, callback)` would make it into the
> language, so weak references are the best way to avoid this. And if I were
> doing this in Java or C++, I would most definitely use weak
> references/pointers for this use case. (This is out of the land of what
> automatic garbage collection can handle at this point.)
>
> On Mon, Sep 7, 2015, 13:33 Mark S. Miller <[email protected]> wrote:
>
>> I also don't get the purpose of this code. What is it trying to achieve?
>>
>>
--
Cheers,
--MarkM
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss