diff --git a/fuzzers/FRET/src/systemstate/helpers.rs b/fuzzers/FRET/src/systemstate/helpers.rs index ed8841803a..09978b53c2 100644 --- a/fuzzers/FRET/src/systemstate/helpers.rs +++ b/fuzzers/FRET/src/systemstate/helpers.rs @@ -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(); } } diff --git a/fuzzers/FRET/src/systemstate/observers.rs b/fuzzers/FRET/src/systemstate/observers.rs index d1701b54c2..be7041d0dc 100644 --- a/fuzzers/FRET/src/systemstate/observers.rs +++ b/fuzzers/FRET/src/systemstate/observers.rs @@ -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); - } - else { - eprintln!("Task {} not found in ready list", 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", next_resp.1); } } else { // TODO: should remaining released tasks be counted as finished?