It turns out that signalling a STORAGE-CONDITION when
gc_find_freeish_pages fails is extremly simple to arrange, and seems
to do the right thing: as at a glance there is no C-state we need to
clean up except the free_pages mutex, and my first cut survives
quite a pounding.
The semantics seem pretty clean too: if we did find some free pages,
but just not enough, signal the STORAGE-CONDITION. If we're totally
out of free pages lose().
At a later stage we could arrange to reserve a page or two for
storage-error handling, so that they would be made available for
consumption before the error is signalled, and new ones reserved (if
any are to be had) on unwind from the error. Then the lose() case
would happen only if the reserve-pages were already gone, and no new
ones have been obtained.
Does this sound sane and desirable? If I have the time I might try
to commit a first cut over the weekend.
-- Nikodemus Schemer: "Buddha is small, clean, and serious."
Lispnik: "Buddha is big, has hairy armpits, and laughs."