From 1a8f47330ec6fa8397ccf6ee04fc86a82d36a82f Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 2 Aug 2020 17:07:57 -0600 Subject: [PATCH] Add a message when user heap is not mapped, do not panic --- src/syscall/process.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/syscall/process.rs b/src/syscall/process.rs index 307a266..e051197 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -455,11 +455,15 @@ pub fn clone(flags: CloneFlags, stack_base: usize) -> Result { // Copy user heap mapping, if found if let Some(heap_shared) = heap_opt { - let frame = active_table.p4()[crate::USER_HEAP_PML4].pointed_frame().expect("user heap not mapped"); - let flags = active_table.p4()[crate::USER_HEAP_PML4].flags(); - active_table.with(&mut new_table, &mut temporary_page, |mapper| { - mapper.p4_mut()[crate::USER_HEAP_PML4].set(frame, flags); - }); + //TODO: find out why this gets unmapped (perhaps it is never mapped) + if let Some(frame) = active_table.p4()[crate::USER_HEAP_PML4].pointed_frame() { + let flags = active_table.p4()[crate::USER_HEAP_PML4].flags(); + active_table.with(&mut new_table, &mut temporary_page, |mapper| { + mapper.p4_mut()[crate::USER_HEAP_PML4].set(frame, flags); + }); + } else { + println!("clone: user heap not mapped for {:X?}", heap_shared); + } context.heap = Some(heap_shared); }