1 #include "page_queue.h" 2 3 4 5 void PageQueue::discard(Queue &queue, Memory *memory) 6 { 7 while (!queue.empty()) 8 { 9 Flexpage *flexpage = queue.front().flexpage; 10 11 queue.pop_front(); 12 memory->release(flexpage->region); 13 delete flexpage; 14 } 15 } 16 17 bool PageQueue::remove(Queue &queue, Positions &positions, PageOwner *owner, Flexpage *flexpage) 18 { 19 Positions::iterator position = positions.find(flexpage); 20 21 if (position == positions.end()) 22 return false; 23 24 /* The found owner may be different from the requesting owner or even NULL 25 if another owner has acquired and then purged its pages. Such a purged 26 flexpage is not immediately usable, however. */ 27 28 Queue::iterator entry = position->second; 29 30 if ((entry->owner == NULL) || (entry->owner != owner)) 31 return false; 32 33 queue.erase(entry); 34 positions.erase(position); 35 36 return true; 37 } 38 39 // vim: tabstop=4 expandtab shiftwidth=4