diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs index 4c982d44f4..47588e10d2 100644 --- a/src/scheme/proc.rs +++ b/src/scheme/proc.rs @@ -942,7 +942,10 @@ impl ContextHandle { let page_span = crate::syscall::validate_region(next()??, next()??)?; let unpin = false; - addrspace.munmap(page_span, unpin, token)?; + let res = addrspace.munmap(page_span, unpin, token)?; + for r in res { + let _ = r.unmap(token); + } } ADDRSPACE_OP_MPROTECT => { let page_span = crate::syscall::validate_region(next()??, next()??)?; diff --git a/src/scheme/sys/iostat.rs b/src/scheme/sys/iostat.rs index afdc008a88..ae4d9d6bae 100644 --- a/src/scheme/sys/iostat.rs +++ b/src/scheme/sys/iostat.rs @@ -117,7 +117,10 @@ pub fn resource(token: &mut CleanLockToken) -> Result> { { let addr_space = Arc::clone(context::current().read(token.token()).addr_space()?); - addr_space.munmap(PageSpan::new(fpath_page, page_count.get()), false, token)?; + let res = addr_space.munmap(PageSpan::new(fpath_page, page_count.get()), false, token)?; + for r in res { + let _ = r.unmap(token); + } } res diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 30d461e1ec..0d3da35333 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -975,7 +975,10 @@ impl UserInner { drop(states_lock); let unpin = true; - AddrSpace::current()?.munmap(callee_responsible, unpin, token)?; + let res = AddrSpace::current()?.munmap(callee_responsible, unpin, token)?; + for r in res { + let _ = r.unmap(token); + } } }, // invalid state @@ -1330,7 +1333,10 @@ impl CaptureGuard { if let Some(ref addrsp) = self.addrsp && !self.span.is_empty() { - addrsp.munmap(self.span, unpin, token)?; + let res = addrsp.munmap(self.span, unpin, token)?; + for r in res { + let _ = r.unmap(token); + } } Ok(())