The current implementation of flushing of PtrQueues is made a bit complicated by having SATB queues first filter the buffer. However, that filtering isn't necessary, and might even be wasteful. It isn't necessary because the entries will eventually be re-filtered as part of marking. So any entries that survive the flush filtering will just be checked again later. There is some benefit to flush filtering if it completely empties the buffer, so the buffer can be deallocated rather than enqueued, but that's a small benefit and may not happen often.