<p dir="ltr">Yes. </p>
<br><div class="gmail_quote"><div dir="ltr">On Mon, Sep 7, 2015, 14:30 Mark S. Miller <<a href="mailto:erights@google.com">erights@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>function rotateStreamHelper(weakRes, interval, format) {</div><div>  let timer = setInterval(() => setStream(weakRes.get(), format),</div><div>                          interval);</div><div>  weakRes.register(() => clearInterval(timer));</div></div><div dir="ltr"><div>}</div><div><br></div><div>function rotateStream(interval, format) {</div><div>  const res = {};</div></div><div dir="ltr"><div>  setStream(res, format);</div><div><br></div><div>  rotateStreamHelper(new WeakRef(res), interval, format);</div></div><div dir="ltr"><div><br></div><div>  // Return a strong reference</div></div><div dir="ltr"><div>  return res;</div><div>}</div><div><br></div><div><br></div><div>Given</div><div><a href="http://wiki.ecmascript.org/doku.php?id=strawman:weak_references" target="_blank">http://wiki.ecmascript.org/doku.php?id=strawman:weak_references</a><br></div><div>does this implement your intention?</div><div><br></div><div><br></div><div class="gmail_extra"></div></div><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 7, 2015 at 10:53 AM, Isiah Meadows <span dir="ltr"><<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">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. </p>
<p dir="ltr">Something like this:</p>
<p dir="ltr">1. Create new stream. <br>
2. Point it to a log file. <br>
3. Every tick on a given interval, do this:<br>
3.1. Change the destination of the stream to a new log file. <br>
4. When the stream itself is GC'd, do this:<br>
4.1. Clear the timer. <br>
4.2. Clear all local references to both the timer and the stream. <br>
5. Return the stream. </p>
<p dir="ltr">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.) </p><div><div>
<br><div class="gmail_quote"><div dir="ltr">On Mon, Sep 7, 2015, 13:33 Mark S. Miller <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra">I also don't get the purpose of this code. What is it trying to achieve?
</div><div class="gmail_extra"><br></div></div>
</blockquote></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><div dir="ltr"><div class="gmail_extra">-- <br><div>    Cheers,<br>    --MarkM</div>
</div></div></blockquote></div>