feat(userspace): Call/ReplyRecv IPC, malformed-request replies, servers exit on dead endpoint; drop send/receive compat, select!, async_syscall
This commit is contained in:
@@ -17,6 +17,5 @@ pub fn run() -> ! {
|
||||
|
||||
let mut srv = server::InputServer::new(device);
|
||||
let ep = types::bounded::CapSlot::new(0).unwrap();
|
||||
server_framework::serve(&mut srv, ep);
|
||||
loop { libkos::syscall::yield_now(); }
|
||||
server_framework::serve(&mut srv, ep)
|
||||
}
|
||||
|
||||
@@ -10,6 +10,5 @@ mod tests;
|
||||
pub fn run() -> ! {
|
||||
let mut srv = server::LogServer::new();
|
||||
let ep = types::bounded::CapSlot::new(0).unwrap();
|
||||
server_framework::serve(&mut srv, ep);
|
||||
loop { libkos::syscall::yield_now(); }
|
||||
server_framework::serve(&mut srv, ep)
|
||||
}
|
||||
|
||||
@@ -10,6 +10,5 @@ mod tests;
|
||||
pub fn run() -> ! {
|
||||
let mut srv = server::PermissionManager::new();
|
||||
let ep = types::bounded::CapSlot::new(0).unwrap();
|
||||
server_framework::serve(&mut srv, ep);
|
||||
loop { libkos::syscall::yield_now(); }
|
||||
server_framework::serve(&mut srv, ep)
|
||||
}
|
||||
|
||||
@@ -12,6 +12,5 @@ pub fn run() -> ! {
|
||||
let mut srv = server::SessionServer::new(create_cap);
|
||||
srv.register_app("snake", "/apps/snake.elf");
|
||||
let ep = types::bounded::CapSlot::new(0).unwrap();
|
||||
server_framework::serve(&mut srv, ep);
|
||||
loop { libkos::syscall::yield_now(); }
|
||||
server_framework::serve(&mut srv, ep)
|
||||
}
|
||||
|
||||
@@ -36,10 +36,17 @@ pub fn run() -> ! {
|
||||
|
||||
let ep = types::bounded::CapSlot::new(0).unwrap();
|
||||
|
||||
let mut next = syscall::receive_msg(ep);
|
||||
loop {
|
||||
let (w0, w1, _w2, _w3) = syscall::receive(ep);
|
||||
|
||||
match w0 {
|
||||
let message = match next {
|
||||
Ok(m) => m,
|
||||
Err(e) => {
|
||||
libkos::println!("storage: endpoint unusable ({:?}), exiting", e);
|
||||
syscall::exit();
|
||||
}
|
||||
};
|
||||
let [w0, w1, _, _] = message.words();
|
||||
let reply = match w0 {
|
||||
CMD_READ_FILE => {
|
||||
let filename_len = w1;
|
||||
let buf = shared_buf();
|
||||
@@ -60,12 +67,14 @@ pub fn run() -> ! {
|
||||
libkos::println!("NOT FOUND");
|
||||
}
|
||||
|
||||
syscall::send(ep, file_size, 0, 0, 0);
|
||||
[file_size, 0, 0, 0]
|
||||
}
|
||||
_ => {
|
||||
syscall::send(ep, 0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
_ => [0, 0, 0, 0],
|
||||
};
|
||||
next = match message {
|
||||
syscall::Received::Call { .. } => syscall::reply_recv(ep, reply, None),
|
||||
_ => syscall::receive_msg(ep),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user