# HG changeset patch # User Paul Boddie # Date 1653778711 -7200 # Node ID e83d6020739b6d647c8da3a702c378c779b1a53d # Parent 56b3134d0c50d063c8aef7c321c9f379939d8b14 Added flexpage and region deallocation for the copied flexpages. diff -r 56b3134d0c50 -r e83d6020739b libfsserver/include/fsserver/copied_page_mapper.h --- a/libfsserver/include/fsserver/copied_page_mapper.h Sat May 28 23:52:48 2022 +0200 +++ b/libfsserver/include/fsserver/copied_page_mapper.h Sun May 29 00:58:31 2022 +0200 @@ -22,6 +22,8 @@ #pragma once +#include + #include #include #include @@ -50,6 +52,7 @@ AccessMap _map; MemoryIncremental _memory; + std::list _queue; /* Internal flexpage retrieval methods. */ diff -r 56b3134d0c50 -r e83d6020739b libfsserver/lib/mapping/copied_page_mapper.cc --- a/libfsserver/lib/mapping/copied_page_mapper.cc Sat May 28 23:52:48 2022 +0200 +++ b/libfsserver/lib/mapping/copied_page_mapper.cc Sun May 29 00:58:31 2022 +0200 @@ -37,10 +37,18 @@ _size = _mapper->get_data_size(); } -/* Upon deallocation, purge active pages. */ +/* Upon deallocation, release allocated flexpages. */ CopiedPageMapper::~CopiedPageMapper() { + while (!_queue.empty()) + { + Flexpage *flexpage = _queue.front(); + + _queue.pop_front(); + _memory.release(flexpage->region); + delete flexpage; + } } /* Interface for the pager. */ @@ -136,9 +144,10 @@ memcpy((void *) region->start, (const void *) flexpage->region->start, flexpage->size); - /* Register the flexpage for future accesses. */ + /* Register the flexpage for future accesses and for deallocation. */ _map.insert(replicated); + _queue.push_back(replicated); return replicated; }