1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/pages/page_queue.cc Sun Mar 28 23:16:12 2021 +0200
1.3 @@ -0,0 +1,39 @@
1.4 +#include "page_queue.h"
1.5 +
1.6 +
1.7 +
1.8 +void PageQueue::discard(Queue &queue, Memory *memory)
1.9 +{
1.10 + while (!queue.empty())
1.11 + {
1.12 + Flexpage *flexpage = queue.front().flexpage;
1.13 +
1.14 + queue.pop_front();
1.15 + memory->release(flexpage->region);
1.16 + delete flexpage;
1.17 + }
1.18 +}
1.19 +
1.20 +bool PageQueue::remove(Queue &queue, Positions &positions, PageOwner *owner, Flexpage *flexpage)
1.21 +{
1.22 + Positions::iterator position = positions.find(flexpage);
1.23 +
1.24 + if (position == positions.end())
1.25 + return false;
1.26 +
1.27 + /* The found owner may be different from the requesting owner or even NULL
1.28 + if another owner has acquired and then purged its pages. Such a purged
1.29 + flexpage is not immediately usable, however. */
1.30 +
1.31 + Queue::iterator entry = position->second;
1.32 +
1.33 + if ((entry->owner == NULL) || (entry->owner != owner))
1.34 + return false;
1.35 +
1.36 + queue.erase(entry);
1.37 + positions.erase(position);
1.38 +
1.39 + return true;
1.40 +}
1.41 +
1.42 +// vim: tabstop=4 expandtab shiftwidth=4