Object unloading confusion

Ömer Sinan Ağacan omeragacan at gmail.com
Wed Apr 15 09:35:12 UTC 2020


Hi Simon,

I'm looking at object unloading code in CheckUnload.c. My understanding of how
unloading works is:

- When unloading of an object is requested the object is added to
  `unloaded_objects`.
- When `unloaded_objects` is not empty, after  GC, we scan the heap for any
  references to objects. This is done in `searchHeapBlocks` called by
  `checkUnload`.
- When `searchHeapBlocks` finds a reference to an object code it marks the
  object code.
- After scanning the heap any objects in `unloaded_objects` that are not marked
  are unloaded.

Does this sound right so far?

What I'm confused about is `searchHeapBlocks`. As far as I can see it just skips
all objects other than stacks. For example here's the code for scanning a
constructor:

    case CONSTR:
    case CONSTR_NOCAF:
    case CONSTR_1_0:
    case CONSTR_0_1:
    case CONSTR_1_1:
    case CONSTR_0_2:
    case CONSTR_2_0:
        size = sizeW_fromITBL(info);
        break;

So if I see a constructor with a reference to an object code in its payload I'll
not mark the object code. This looks wrong to me. I don't understand why we only
care about stacks and nothing else. Could you comment on this?

Thanks,

Ömer


More information about the ghc-devs mailing list