1.1 --- a/libexec/lib/src/external_pager.cc Mon Mar 06 18:30:22 2023 +0100
1.2 +++ b/libexec/lib/src/external_pager.cc Mon Mar 06 19:12:48 2023 +0100
1.3 @@ -60,7 +60,22 @@
1.4 {
1.5 printf("Pager closing...\n");
1.6
1.7 - /* Unmap all regions. */
1.8 + /* Remove pager regions to avoid unmapping them twice. */
1.9 +
1.10 + remove(_rm_stack->region());
1.11 +
1.12 + for (unsigned int i = 0; i < _rm_payload->segments(); i++)
1.13 + remove(_rm_payload->segment(i)->region());
1.14 +
1.15 + /* Delete the pager resources. */
1.16 +
1.17 + if (_rm_payload != NULL)
1.18 + delete _rm_payload;
1.19 +
1.20 + if (_rm_stack != NULL)
1.21 + delete _rm_stack;
1.22 +
1.23 + /* Unmap all remaining regions. */
1.24
1.25 MappedRegions::iterator it;
1.26
1.27 @@ -117,6 +132,20 @@
1.28
1.29
1.30
1.31 +/* Manage pager resources. */
1.32 +
1.33 +void ExternalPager::set_payload(Payload *payload)
1.34 +{
1.35 + _rm_payload = payload;
1.36 +}
1.37 +
1.38 +void ExternalPager::set_stack(ExplicitSegment *stack)
1.39 +{
1.40 + _rm_stack = stack;
1.41 +}
1.42 +
1.43 +
1.44 +
1.45 /* Handle a general exception. */
1.46
1.47 long ExternalPager::exception(l4_exc_regs_t regs, l4_snd_fpage_t *region)