<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 19 July 2018 at 11:09, Ömer Sinan Ağacan <span dir="ltr"><<a href="mailto:omeragacan@gmail.com" target="_blank">omeragacan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Simon,<br>
<br>
Currently isAlive considers all static closures as being alive. The code:<br>
<br>
    // ignore static closures<br>
    //<br>
    // ToDo: This means we never look through IND_STATIC, which means<br>
    // isRetainer needs to handle the IND_STATIC case rather than<br>
    // raising an error.<br>
    //<br>
    // ToDo: for static closures, check the static link field.<br>
    // Problem here is that we sometimes don't set the link field, eg.<br>
    // for static closures with an empty SRT or CONSTR_NOCAFs.<br>
    //<br>
    if (!HEAP_ALLOCED_GC(q)) {<br>
        return p;<br>
    }<br>
<br>
I'd expect this to cause leaks when e.g. key of a WEAK is a static object. Is<br>
this not the case? </blockquote><div><br></div><div>Correct, I believe weak pointers to static objects don't work (not sure if there's a ticket for this, but if not there should be).<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I think this is easy to fix but I may be missing something<br>
and wanted to ask before investing into it. The idea:<br>
<br>
- Evacuate all static objects in evacuate() (including the ones with no SRTs)<br>
  (assuming all static objects have a STATIC_FIELD, is this really the case?)<br></blockquote><div><br></div><div>This would be expensive. We deliberately don't touch the static objects in a minor GC because it adds potentially tens of ms to the GC time, and the optimisation to avoid evacuating the static objects with no SRTs is an important one.<br></div><div><br></div><div>Cheers</div><div>Simon<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- In isAlive() check if (STATIC_FIELD & static_flag) != 0. If it is then the<br>
  object is alive.<br>
<br>
Am I missing anything?<br>
<br>
Thanks,<br>
<br>
Ömer<br>
</blockquote></div><br></div></div>