fix releases

This commit is contained in:
Alwin Berger 2024-08-20 12:20:55 +02:00
parent 6995cd053b
commit bd7ddaffbd
2 changed files with 13 additions and 9 deletions

View File

@ -179,6 +179,7 @@ where
fn pre_exec(&mut self, _emulator: libafl_qemu::Qemu, _input: &S::Input) {
unsafe {
CURRENT_SYSTEMSTATE_VEC.clear();
JOBS_DONE.clear();
}
}

View File

@ -262,7 +262,7 @@ fn get_release_response_pairs(rel: &Vec<(u64, String)>, resp: &Vec<(u64, String)
r.next();
} else {
if let Some(peek_resp) = d.peek() {
if peek_resp.0 >= peek_rel.0 { // multiple releases before respopnse, only use the latest release
if peek_resp.0 > peek_rel.0 { // multiple releases before response, only use the latest release
eprintln!("Task {} released multiple times before response", peek_rel.1);
ready.insert(&peek_rel.1, peek_rel.0);
r.next();
@ -271,14 +271,17 @@ fn get_release_response_pairs(rel: &Vec<(u64, String)>, resp: &Vec<(u64, String)
break;
}
}
if let Some(peek_resp) = d.next() {
if ready.contains_key(&peek_resp.1) {
assert!(peek_resp.0 >= ready[&peek_resp.1]);
ret.push((ready[&peek_resp.1], peek_resp.0, peek_resp.1.clone()));
ready.remove(&peek_resp.1);
if let Some(next_resp) = d.next() {
if ready.contains_key(&next_resp.1) {
if ready[&next_resp.1] >= next_resp.0 {
eprintln!("Task {} released after response", next_resp.1);
} else {
// assert!(peek_resp.0 >= ready[&peek_resp.1]);
ret.push((ready[&next_resp.1], next_resp.0, next_resp.1.clone()));
ready.remove(&next_resp.1);
}
else {
eprintln!("Task {} not found in ready list", peek_resp.1);
} else {
eprintln!("Task {} not found in ready list", next_resp.1);
}
} else {
// TODO: should remaining released tasks be counted as finished?