This morning I realized that I don't understand how an elided header is
possible in the presence of concurrent mutators. Here's the scenario that
bothers me:

   1. Thread A creates an object O in Nursery A.
   2. Thread A stores reference to O into some tenured object.
   3. Thread B now reads this reference.
   4. Thread B collects, or performs an integrate, causing a change in the
   reference count in O


Except that thread A hasn't collected, so O is still in the nursery, so it
has no header and therefore no reference count...

There is a related hazard if the mutator and the collector are allowed to
run concurrently and RC increments are deferred. You can end up with a
deferred increment in thread A's state that names an object in tenured
space that B is attempting to collect.


shap
_______________________________________________
bitc-dev mailing list
[email protected]
http://www.coyotos.org/mailman/listinfo/bitc-dev

Reply via email to