I don't understand what this achieves.

When an application wants to start the internal phase of a checkpoint, there are some pages queued for LRU eviction.  Some of them may be dirty, some not.  Clearing the queue doesn't prevent new pages from being scheduled for LRU eviction and then becoming dirty.  At that point, we need some other mechanism to be sure no thread will evict a dirty page.

The basis of synchronization between threads is atomic updates to page states.  If a thread locks a page, then checks that dirty eviction is permitted (the logic you've moved to `__rec_review`), I don't see how emptying the queue here makes things any safer.

Maybe I'm being misled by the comment "drain the queue of eviction pages", and the intent is actually to wait for `lru_count` to go to zero -- in other words, for any reconciliation that already in progress to complete?