diff --git a/scheme/user.rs b/scheme/user.rs index c209ecfb9c3bf153d3b68a3d0eb469644157dc8e..7da21d47f0c3908c84ed86c7526b8cab1f5c1179 100644 --- a/scheme/user.rs +++ b/scheme/user.rs @@ -9,7 +9,7 @@ use syscall::{convert_to_result, Call, Error, Result}; use super::Scheme; -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Default)] #[repr(packed)] pub struct Packet { pub id: usize, diff --git a/syscall/process.rs b/syscall/process.rs index 44175d7a12154d31f69f0b33b76a7cce2e9bfd43..b6be85fa52d3860b4fc17e6732fd1927bebdea1d 100644 --- a/syscall/process.rs +++ b/syscall/process.rs @@ -178,6 +178,8 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<usize> { } } + // If not cloning files, dup to get a new number from scheme + // This has to be done outside the context lock to prevent deadlocks if flags & CLONE_FILES == 0 { for (fd, mut file_option) in files.lock().iter_mut().enumerate() { let new_file_option = if let Some(file) = *file_option { @@ -357,7 +359,7 @@ pub fn exec(path: &[u8], arg_ptrs: &[[usize; 2]]) -> Result<usize> { //TODO: Only read elf header, not entire file. Then read required segments let mut data = vec![]; loop { - let mut buf = [0; 4096]; + let mut buf = [0; 16384]; let count = syscall::read(file, &mut buf)?; if count > 0 { data.extend_from_slice(&buf[..count]);