Significant improvements for events - switch to event queue in orbital

This commit is contained in:
Jeremy Soller 2016-10-14 20:12:21 -06:00
parent 6d19f59c08
commit 77810d6713
9 changed files with 69 additions and 42 deletions

View file

@ -232,7 +232,11 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<usize> {
};
match result {
Ok(new_number) => {
Some(context::file::File { scheme: file.scheme, number: new_number })
Some(context::file::File {
scheme: file.scheme,
number: new_number,
event: None,
})
},
Err(err) => {
println!("clone: failed to dup {}: {:?}", fd, err);
@ -616,7 +620,9 @@ pub fn exit(status: usize) -> ! {
/// Files must be closed while context is valid so that messages can be passed
for (fd, file_option) in close_files.drain(..).enumerate() {
if let Some(file) = file_option {
context::event::unregister(fd, file.scheme, file.number);
if let Some(event_id) = file.event {
context::event::unregister(fd, file.scheme, event_id);
}
let scheme_option = {
let schemes = scheme::schemes();