1.1 --- a/files/pipe_paging.cc Thu Mar 25 01:42:50 2021 +0100
1.2 +++ b/files/pipe_paging.cc Fri Mar 26 00:03:30 2021 +0100
1.3 @@ -5,6 +5,30 @@
1.4 {
1.5 }
1.6
1.7 +/* Detach one endpoint. */
1.8 +
1.9 +void PipePaging::detach()
1.10 +{
1.11 + if (!_endpoints)
1.12 + return;
1.13 + else
1.14 + _endpoints--;
1.15 +
1.16 + if (_endpoints)
1.17 + return;
1.18 +
1.19 + /* Discard all regions from the pipe. */
1.20 +
1.21 + while (!_regions.empty())
1.22 + {
1.23 + PageMapper *mapper = _regions.front();
1.24 +
1.25 + _regions.pop_front();
1.26 + mapper->detach();
1.27 + delete mapper;
1.28 + }
1.29 +}
1.30 +
1.31 /* Add a region to the sequence. */
1.32
1.33 void PipePaging::add_region(PageMapper *mapper)
1.34 @@ -31,7 +55,16 @@
1.35 if (_accessors.size() > _regions.size())
1.36 _accessors.pop_front();
1.37
1.38 + /* Detach and discard the current page mapper. */
1.39 +
1.40 + PageMapper *mapper = _regions.front();
1.41 +
1.42 _regions.pop_front();
1.43 + mapper->detach();
1.44 + delete mapper;
1.45 +
1.46 + /* Return the next region. */
1.47 +
1.48 return _regions.front();
1.49 }
1.50 else