Use observers to handle crashes in run_target for TimeoutForkserverExecutor (#1189)
Co-authored-by: Dongjia "toka" Zhang <tokazerkje@outlook.com>
This commit is contained in:
parent
1bd21509af
commit
807a534121
@ -31,7 +31,7 @@ use crate::{
|
|||||||
fs::{get_unique_std_input_file, InputFile},
|
fs::{get_unique_std_input_file, InputFile},
|
||||||
os::{dup2, pipes::Pipe},
|
os::{dup2, pipes::Pipe},
|
||||||
shmem::{ShMem, ShMemProvider, UnixShMemProvider},
|
shmem::{ShMem, ShMemProvider, UnixShMemProvider},
|
||||||
tuples::Prepend,
|
tuples::{MatchName, Prepend},
|
||||||
AsMutSlice, AsSlice, Truncate,
|
AsMutSlice, AsSlice, Truncate,
|
||||||
},
|
},
|
||||||
executors::{Executor, ExitKind, HasObservers},
|
executors::{Executor, ExitKind, HasObservers},
|
||||||
@ -418,7 +418,7 @@ impl<E> TimeoutForkserverExecutor<E> {
|
|||||||
|
|
||||||
impl<E, EM, Z> Executor<EM, Z> for TimeoutForkserverExecutor<E>
|
impl<E, EM, Z> Executor<EM, Z> for TimeoutForkserverExecutor<E>
|
||||||
where
|
where
|
||||||
E: Executor<EM, Z> + HasForkserver + Debug,
|
E: Executor<EM, Z> + HasForkserver + HasObservers + Debug,
|
||||||
E::Input: HasTargetBytes,
|
E::Input: HasTargetBytes,
|
||||||
EM: UsesState<State = E::State>,
|
EM: UsesState<State = E::State>,
|
||||||
Z: UsesState<State = E::State>,
|
Z: UsesState<State = E::State>,
|
||||||
@ -488,6 +488,13 @@ where
|
|||||||
self.executor.forkserver_mut().set_status(status);
|
self.executor.forkserver_mut().set_status(status);
|
||||||
if libc::WIFSIGNALED(self.executor.forkserver().status()) {
|
if libc::WIFSIGNALED(self.executor.forkserver().status()) {
|
||||||
exit_kind = ExitKind::Crash;
|
exit_kind = ExitKind::Crash;
|
||||||
|
#[cfg(feature = "regex")]
|
||||||
|
if let Some(asan_observer) = self
|
||||||
|
.observers_mut()
|
||||||
|
.match_name_mut::<AsanBacktraceObserver>("AsanBacktraceObserver")
|
||||||
|
{
|
||||||
|
asan_observer.parse_asan_output_from_asan_log_file(pid)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.executor.forkserver_mut().set_last_run_timed_out(1);
|
self.executor.forkserver_mut().set_last_run_timed_out(1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user