So, while I'm heaping much grumpiness on threads (though I suppose, as I've been out of touch for a bit maybe you've all solved the problem. That'd be nice) I've also been thinking about DOD, as there's a fair amount of overlap in the things that cause problems for threads and the ones that cause problems for generational garbage collectors.

For a generational DOD to work we have to have a way to note which generation a structure's in, as well as trap writes so we know when you're referencing an old generation from a new, and vice versa. (Threads have to trap mutations of this stuff, as this is in large part the bits that need synchronizing on mutation) A short list of mutating activities that are of issue are:

   *) Setting the PMC data pointer
   *) Resetting the PMC data pointer
   *) Setting the PMC cache pointer
   *) Resetting the PMC cache pointer
   *) Putting a PMC or buffer pointer into a buffer
   *) Altering a buffer's metadata (size or location)

We don't care about most buffer data, just those buffers whose data are pointers to PMCs or other buffers. (Which argues that strings and buffers that contain raw data should be allocated from different pools than buffers that contain pointers to DOD-able data)

I think, then, that we'll want to intercept all these activities, which means that we need to have API facilities for them. Before we do that, though, I want to make sure there's nothing I missed from that list.
--
Dan


--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                      teddy bears get drunk

Reply via email to