Add new thread exception (untested)

This commit is contained in:
Quentin Legot
2023-04-11 17:47:36 +02:00
parent 6c19f66d62
commit a36e470ea1
5 changed files with 56 additions and 8 deletions

View File

@ -86,13 +86,17 @@ impl ThreadManager {
}
/// Start a thread, attaching it to a process
pub fn start_thread(&mut self, thread: Rc<RefCell<Thread>>, owner: Process, func_pc: u64, sp_loc: u64, argument: i64) {
pub fn start_thread(&mut self, thread: Rc<RefCell<Thread>>, owner: Rc<RefCell<Process>>, func_pc: u64, sp_loc: u64, argument: i64) {
let mut thread_m = thread.borrow_mut();
assert_eq!(thread_m.process, Option::None);
thread_m.process = Option::Some(owner);
let ptr = sp_loc; // todo addrspace
thread_m.init_thread_context(func_pc, ptr, argument);
thread_m.process.as_mut().unwrap().num_thread += 1;
if let Some(process) = &thread_m.process {
process.borrow_mut().num_thread += 1;
} else {
}
self.get_g_alive().push(Rc::clone(&thread));
self.ready_to_run(Rc::clone(&thread));
}
@ -215,6 +219,7 @@ mod test {
system.get_thread_manager().get_g_alive().push(Rc::clone(&thread1));
let owner1 = Process { num_thread: 0 };
let owner1 = Rc::new(RefCell::new(owner1));
system.get_thread_manager().start_thread(Rc::clone(&thread1), owner1, loader.elf_header.entrypoint, ptr, -1);
debug_assert_eq!(thread1.borrow_mut().thread_context.pc, start_pc);
debug_assert!(system.get_thread_manager().get_g_alive().contains(&Rc::clone(&thread1)));