1.1 --- a/libfsserver/include/fsserver/copied_page_mapper.h Sat May 28 23:52:48 2022 +0200
1.2 +++ b/libfsserver/include/fsserver/copied_page_mapper.h Sun May 29 00:58:31 2022 +0200
1.3 @@ -22,6 +22,8 @@
1.4
1.5 #pragma once
1.6
1.7 +#include <list>
1.8 +
1.9 #include <fsserver/access_map.h>
1.10 #include <fsserver/generic_page_mapper.h>
1.11 #include <mem/memory_incremental.h>
1.12 @@ -50,6 +52,7 @@
1.13
1.14 AccessMap _map;
1.15 MemoryIncremental _memory;
1.16 + std::list<Flexpage *> _queue;
1.17
1.18 /* Internal flexpage retrieval methods. */
1.19
2.1 --- a/libfsserver/lib/mapping/copied_page_mapper.cc Sat May 28 23:52:48 2022 +0200
2.2 +++ b/libfsserver/lib/mapping/copied_page_mapper.cc Sun May 29 00:58:31 2022 +0200
2.3 @@ -37,10 +37,18 @@
2.4 _size = _mapper->get_data_size();
2.5 }
2.6
2.7 -/* Upon deallocation, purge active pages. */
2.8 +/* Upon deallocation, release allocated flexpages. */
2.9
2.10 CopiedPageMapper::~CopiedPageMapper()
2.11 {
2.12 + while (!_queue.empty())
2.13 + {
2.14 + Flexpage *flexpage = _queue.front();
2.15 +
2.16 + _queue.pop_front();
2.17 + _memory.release(flexpage->region);
2.18 + delete flexpage;
2.19 + }
2.20 }
2.21
2.22 /* Interface for the pager. */
2.23 @@ -136,9 +144,10 @@
2.24
2.25 memcpy((void *) region->start, (const void *) flexpage->region->start, flexpage->size);
2.26
2.27 - /* Register the flexpage for future accesses. */
2.28 + /* Register the flexpage for future accesses and for deallocation. */
2.29
2.30 _map.insert(replicated);
2.31 + _queue.push_back(replicated);
2.32 return replicated;
2.33 }
2.34