shmem service speedup env (#256)
* shmem service speedup env * typos, cleanup * fmt
This commit is contained in:
parent
ee33faa881
commit
cb8efd3abf
@ -15,6 +15,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use std::{
|
use std::{
|
||||||
borrow::BorrowMut,
|
borrow::BorrowMut,
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
|
env,
|
||||||
io::{Read, Write},
|
io::{Read, Write},
|
||||||
marker::PhantomData,
|
marker::PhantomData,
|
||||||
rc::{Rc, Weak},
|
rc::{Rc, Weak},
|
||||||
@ -47,6 +48,9 @@ const UNIX_SERVER_NAME: &str = "@libafl_unix_shmem_server";
|
|||||||
#[cfg(any(target_os = "ios", target_os = "macos"))]
|
#[cfg(any(target_os = "ios", target_os = "macos"))]
|
||||||
const UNIX_SERVER_NAME: &str = "./libafl_unix_shmem_server";
|
const UNIX_SERVER_NAME: &str = "./libafl_unix_shmem_server";
|
||||||
|
|
||||||
|
/// Env variable. If set, we won't try to spawn the service
|
||||||
|
const AFL_SHMEM_SERVICE_STARTED: &str = "AFL_SHMEM_SERVICE_STARTED";
|
||||||
|
|
||||||
/// Hands out served shared maps, as used on Android.
|
/// Hands out served shared maps, as used on Android.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ServedShMemProvider<SP>
|
pub struct ServedShMemProvider<SP>
|
||||||
@ -329,6 +333,8 @@ impl Drop for ShMemServiceThread {
|
|||||||
// try to remove the file from fs, and ignore errors.
|
// try to remove the file from fs, and ignore errors.
|
||||||
#[cfg(any(target_os = "macos", target_os = "ios"))]
|
#[cfg(any(target_os = "macos", target_os = "ios"))]
|
||||||
fs::remove_file(&UNIX_SERVER_NAME).unwrap();
|
fs::remove_file(&UNIX_SERVER_NAME).unwrap();
|
||||||
|
|
||||||
|
env::remove_var(AFL_SHMEM_SERVICE_STARTED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -341,6 +347,14 @@ where
|
|||||||
/// Returns [`ShMemService::Failed`] on error.
|
/// Returns [`ShMemService::Failed`] on error.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn start() -> Self {
|
pub fn start() -> Self {
|
||||||
|
// Already running, no need to spawn additional thraeds anymore.
|
||||||
|
if env::var(AFL_SHMEM_SERVICE_STARTED).is_ok() {
|
||||||
|
return Self::Failed {
|
||||||
|
err_msg: "ShMemService already started".to_string(),
|
||||||
|
phantom: PhantomData,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(clippy::mutex_atomic)]
|
#[allow(clippy::mutex_atomic)]
|
||||||
let syncpair = Arc::new((Mutex::new(ShMemServiceStatus::Starting), Condvar::new()));
|
let syncpair = Arc::new((Mutex::new(ShMemServiceStatus::Starting), Condvar::new()));
|
||||||
let childsyncpair = Arc::clone(&syncpair);
|
let childsyncpair = Arc::clone(&syncpair);
|
||||||
@ -371,6 +385,10 @@ where
|
|||||||
success = cvar.wait(success).unwrap();
|
success = cvar.wait(success).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optimization: Following calls or even child processe don't need to try to start a service anymore.
|
||||||
|
// It's either running at this point, or we won't be able to spawn it anyway.
|
||||||
|
env::set_var(AFL_SHMEM_SERVICE_STARTED, "true");
|
||||||
|
|
||||||
match *success {
|
match *success {
|
||||||
ShMemServiceStatus::Starting => panic!("Unreachable"),
|
ShMemServiceStatus::Starting => panic!("Unreachable"),
|
||||||
ShMemServiceStatus::Started => {
|
ShMemServiceStatus::Started => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user