forked from Rativel/BurritOS
Fix exceptions with semaphore
This commit is contained in:
@@ -2,7 +2,7 @@ use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
use crate::{simulator::{machine::{ExceptionType, Machine}, error::{MachineOk, MachineError}}};
|
||||
|
||||
use super::{system::System, thread::Thread, synch::Semaphore};
|
||||
use super::{system::System, thread::Thread};
|
||||
|
||||
type Error = String;
|
||||
|
||||
@@ -200,21 +200,12 @@ fn syscall(machine: &mut Machine, system: &mut System) -> Result<MachineOk, Mach
|
||||
|
||||
fn sc_p(machine: &mut Machine, system: &mut System) -> Result<MachineOk, MachineError> {
|
||||
let id_sema = machine.int_reg.get_reg(10);
|
||||
match system.get_obj_addrs().search_semaphore(id_sema as i32) {
|
||||
Some(sema) => { sema.p(machine, system.get_thread_manager()); Ok(MachineOk::Ok) }
|
||||
None => Err(format!("Coudn't find semaphore {}", id_sema))?
|
||||
}
|
||||
system.get_thread_manager().sem_p(id_sema as i32, machine)
|
||||
}
|
||||
|
||||
fn sc_v(machine: &mut Machine, system: &mut System) -> Result<MachineOk, MachineError> {
|
||||
let id_sema = machine.int_reg.get_reg(10);
|
||||
match system.get_obj_addrs().search_semaphore(id_sema as i32) {
|
||||
Some(sema) => {
|
||||
sema.v(machine, system.get_thread_manager());
|
||||
Ok(MachineOk::Ok)
|
||||
},
|
||||
None => Err(format!("Couldn't find semaphore {}", id_sema))?
|
||||
}
|
||||
system.get_thread_manager().sem_v(id_sema as i32, machine)
|
||||
}
|
||||
|
||||
fn sc_sem_create(machine: &mut Machine) -> Result<MachineOk, MachineError> {
|
||||
|
||||
Reference in New Issue
Block a user