diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f4510882dc..a8cc60e368 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -75,7 +75,7 @@ pub trait X
}
```
-- __Ideally__ the types used in the the arguments of methods in traits should have the same as the types defined on the traits.
+- __Ideally__ the types used in the arguments of methods in traits should have the same as the types defined on the traits.
```rust
pub trait X // <- this trait have 3 generics, A, B, and C
{
@@ -84,6 +84,22 @@ pub trait X // <- this trait have 3 generics, A, B, and C
fn do_other_stuff(&self, a: A, b: B); // <- this is not ideal because it does not have C.
}
```
+- Generic naming should be consistent. Do NOT use multiple name for the same generic, it just makes things more confusing. Do:
+```rust
+pub struct X {
+ phantom: PhanomData,
+}
+
+impl X {}
+```
+But not:
+```rust
+pub struct X {
+ phantom: PhanomData,
+}
+
+impl X {} // <- Do NOT do that, use A instead of B
+```
- Always alphabetically order the type generics. Therefore,
```rust
pub struct X {}; // <- Generics are alphabetically ordered
@@ -91,4 +107,31 @@ pub struct X {}; // <- Generics are alphabetically ordered
But not,
```rust
pub struct X {}; // <- Generics are not ordered
-```
\ No newline at end of file
+```
+- Similarly, generic bounds in `where` clauses should be alphabetically sorted. Prefer:
+```rust
+pub trait FooA {}
+pub trait FooB {}
+
+pub struct X;
+
+impl X
+where
+ A: FooA,
+ B: FooB,
+{}
+```
+Over:
+```rust
+pub trait FooA {}
+pub trait FooB {}
+
+pub struct X;
+
+impl X
+where
+ B: FooB, // <-|
+ // | Generic bounds are not alphabetically ordered.
+ A: FooA, // <-|
+{}
+```
diff --git a/fuzzers/binary_only/frida_executable_libpng/src/fuzzer.rs b/fuzzers/binary_only/frida_executable_libpng/src/fuzzer.rs
index bd3e2202a4..d4988a97b0 100644
--- a/fuzzers/binary_only/frida_executable_libpng/src/fuzzer.rs
+++ b/fuzzers/binary_only/frida_executable_libpng/src/fuzzer.rs
@@ -96,7 +96,7 @@ unsafe fn fuzz(
let shmem_provider = StdShMemProvider::new()?;
let mut run_client = |state: Option<_>,
- mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mgr: LlmpRestartingEventManager<_, _, _, _, _>,
client_description: ClientDescription| {
// The restarting state will spawn the same process again as child, then restarted it each time it crashes.
@@ -104,7 +104,7 @@ unsafe fn fuzz(
if options.asan && options.asan_cores.contains(client_description.core_id()) {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
@@ -231,7 +231,7 @@ unsafe fn fuzz(
})(state, mgr, client_description)
} else if options.cmplog && options.cmplog_cores.contains(client_description.core_id()) {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
@@ -367,7 +367,7 @@ unsafe fn fuzz(
})(state, mgr, client_description)
} else {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
diff --git a/fuzzers/binary_only/frida_libpng/src/fuzzer.rs b/fuzzers/binary_only/frida_libpng/src/fuzzer.rs
index adc03b5212..6d7ee9441e 100644
--- a/fuzzers/binary_only/frida_libpng/src/fuzzer.rs
+++ b/fuzzers/binary_only/frida_libpng/src/fuzzer.rs
@@ -81,7 +81,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
};
let mut run_client = |state: Option<_>,
- mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mgr: LlmpRestartingEventManager<_, _, _, _, _>,
client_description: ClientDescription| {
// The restarting state will spawn the same process again as child, then restarted it each time it crashes.
@@ -101,7 +101,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
// if options.asan && options.asan_cores.contains(client_description.core_id()) {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
diff --git a/fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs b/fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs
index 7e613bf238..5e09527f1a 100644
--- a/fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs
+++ b/fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs
@@ -78,7 +78,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
let shmem_provider = StdShMemProvider::new()?;
let mut run_client = |state: Option<_>,
- mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mgr: LlmpRestartingEventManager<_, _, _, _, _>,
client_description: ClientDescription| {
// The restarting state will spawn the same process again as child, then restarted it each time it crashes.
@@ -98,7 +98,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
if options.asan && options.asan_cores.contains(client_description.core_id()) {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
@@ -214,7 +214,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
})(state, mgr, client_description)
} else if options.cmplog && options.cmplog_cores.contains(client_description.core_id()) {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
@@ -344,7 +344,7 @@ unsafe fn fuzz(options: &FuzzerOptions) -> Result<(), Error> {
})(state, mgr, client_description)
} else {
(|state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
_client_description| {
let gum = Gum::obtain();
diff --git a/fuzzers/binary_only/qemu_coverage/src/fuzzer.rs b/fuzzers/binary_only/qemu_coverage/src/fuzzer.rs
index 9bb14f600c..5bb670362e 100644
--- a/fuzzers/binary_only/qemu_coverage/src/fuzzer.rs
+++ b/fuzzers/binary_only/qemu_coverage/src/fuzzer.rs
@@ -124,7 +124,7 @@ pub fn fuzz() {
env::remove_var("LD_LIBRARY_PATH");
let mut run_client = |state: Option<_>,
- mut mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut mgr: LlmpRestartingEventManager<_, _, _, _, _>,
client_description: ClientDescription| {
let mut cov_path = options.coverage_path.clone();
diff --git a/fuzzers/binary_only/qemu_launcher/src/instance.rs b/fuzzers/binary_only/qemu_launcher/src/instance.rs
index cb23e17640..5a6a8584bf 100644
--- a/fuzzers/binary_only/qemu_launcher/src/instance.rs
+++ b/fuzzers/binary_only/qemu_launcher/src/instance.rs
@@ -7,7 +7,7 @@ use libafl::events::SimpleEventManager;
use libafl::events::{LlmpRestartingEventManager, MonitorTypedEventManager};
use libafl::{
corpus::{Corpus, InMemoryOnDiskCorpus, OnDiskCorpus},
- events::{ClientDescription, EventRestarter, NopEventManager},
+ events::{ClientDescription, EventRestarter},
executors::{Executor, ShadowExecutor},
feedback_or, feedback_or_fast,
feedbacks::{CrashFeedback, MaxMapFeedback, TimeFeedback, TimeoutFeedback},
@@ -30,7 +30,7 @@ use libafl::{
Error, HasMetadata, NopFuzzer,
};
#[cfg(not(feature = "simplemgr"))]
-use libafl_bolts::shmem::StdShMemProvider;
+use libafl_bolts::shmem::{StdShMem, StdShMemProvider};
use libafl_bolts::{
ownedref::OwnedMutSlice,
rands::StdRand,
@@ -58,7 +58,7 @@ pub type ClientState =
pub type ClientMgr = SimpleEventManager;
#[cfg(not(feature = "simplemgr"))]
pub type ClientMgr = MonitorTypedEventManager<
- LlmpRestartingEventManager<(), BytesInput, ClientState, StdShMemProvider>,
+ LlmpRestartingEventManager<(), BytesInput, ClientState, StdShMem, StdShMemProvider>,
M,
>;
diff --git a/fuzzers/forkserver/libafl-fuzz/src/feedback/filepath.rs b/fuzzers/forkserver/libafl-fuzz/src/feedback/filepath.rs
index 28fc3d2009..20abd783c7 100644
--- a/fuzzers/forkserver/libafl-fuzz/src/feedback/filepath.rs
+++ b/fuzzers/forkserver/libafl-fuzz/src/feedback/filepath.rs
@@ -68,6 +68,12 @@ where
Ok(false)
}
+ #[cfg(feature = "track_hit_feedbacks")]
+ #[inline]
+ fn last_result(&self) -> Result {
+ Ok(false)
+ }
+
fn append_metadata(
&mut self,
state: &mut S,
@@ -78,10 +84,4 @@ where
(self.func)(state, testcase, &self.out_dir)?;
Ok(())
}
-
- #[cfg(feature = "track_hit_feedbacks")]
- #[inline]
- fn last_result(&self) -> Result {
- Ok(false)
- }
}
diff --git a/fuzzers/forkserver/libafl-fuzz/src/fuzzer.rs b/fuzzers/forkserver/libafl-fuzz/src/fuzzer.rs
index 5d545207ad..633f4cc212 100644
--- a/fuzzers/forkserver/libafl-fuzz/src/fuzzer.rs
+++ b/fuzzers/forkserver/libafl-fuzz/src/fuzzer.rs
@@ -42,7 +42,7 @@ use libafl::{
Error, Fuzzer, HasFeedback, HasMetadata, SerdeAny,
};
#[cfg(not(feature = "fuzzbench"))]
-use libafl_bolts::shmem::StdShMemProvider;
+use libafl_bolts::shmem::{StdShMem, StdShMemProvider};
use libafl_bolts::{
core_affinity::CoreId,
current_nanos, current_time,
@@ -77,10 +77,11 @@ pub type LibaflFuzzState =
#[cfg(not(feature = "fuzzbench"))]
type LibaflFuzzManager = CentralizedEventManager<
- LlmpRestartingEventManager<(), BytesInput, LibaflFuzzState, StdShMemProvider>,
+ LlmpRestartingEventManager<(), BytesInput, LibaflFuzzState, StdShMem, StdShMemProvider>,
(),
BytesInput,
LibaflFuzzState,
+ StdShMem,
StdShMemProvider,
>;
#[cfg(feature = "fuzzbench")]
diff --git a/fuzzers/full_system/nyx_launcher/src/instance.rs b/fuzzers/full_system/nyx_launcher/src/instance.rs
index c20b3839d8..568297844b 100644
--- a/fuzzers/full_system/nyx_launcher/src/instance.rs
+++ b/fuzzers/full_system/nyx_launcher/src/instance.rs
@@ -30,7 +30,7 @@ use libafl::{
use libafl_bolts::{
current_nanos,
rands::StdRand,
- shmem::StdShMemProvider,
+ shmem::{StdShMem, StdShMemProvider},
tuples::{tuple_list, Merge},
};
use libafl_nyx::{
@@ -44,7 +44,7 @@ pub type ClientState =
StdState, BytesInput, StdRand, OnDiskCorpus>;
pub type ClientMgr = MonitorTypedEventManager<
- LlmpRestartingEventManager<(), BytesInput, ClientState, StdShMemProvider>,
+ LlmpRestartingEventManager<(), BytesInput, ClientState, StdShMem, StdShMemProvider>,
M,
>;
diff --git a/fuzzers/inprocess/libfuzzer_libpng_centralized/src/lib.rs b/fuzzers/inprocess/libfuzzer_libpng_centralized/src/lib.rs
index 8eb53dafe8..f4508a1bb0 100644
--- a/fuzzers/inprocess/libfuzzer_libpng_centralized/src/lib.rs
+++ b/fuzzers/inprocess/libfuzzer_libpng_centralized/src/lib.rs
@@ -141,7 +141,7 @@ pub extern "C" fn libafl_main() {
let mut secondary_run_client =
|state: Option<_>,
- mut mgr: CentralizedEventManager<_, _, _, _, _>,
+ mut mgr: CentralizedEventManager<_, _, _, _, _, _>,
_client_description: ClientDescription| {
// Create an observation channel using the coverage map
let edges_observer =
diff --git a/fuzzers/inprocess/libfuzzer_libpng_cmin/src/lib.rs b/fuzzers/inprocess/libfuzzer_libpng_cmin/src/lib.rs
index 88e552b437..850d15ed27 100644
--- a/fuzzers/inprocess/libfuzzer_libpng_cmin/src/lib.rs
+++ b/fuzzers/inprocess/libfuzzer_libpng_cmin/src/lib.rs
@@ -219,7 +219,7 @@ fn fuzz(corpus_dirs: &[PathBuf], objective_dir: PathBuf, broker_port: u16) -> Re
let orig_size = state.corpus().count();
let msg = "Started distillation...".to_string();
- as EventFirer>::log(
+ as EventFirer>::log(
&mut restarting_mgr,
&mut state,
LogSeverity::Info,
@@ -227,7 +227,7 @@ fn fuzz(corpus_dirs: &[PathBuf], objective_dir: PathBuf, broker_port: u16) -> Re
)?;
minimizer.minimize(&mut fuzzer, &mut executor, &mut restarting_mgr, &mut state)?;
let msg = format!("Distilled out {} cases", orig_size - state.corpus().count());
- as EventFirer>::log(
+ as EventFirer>::log(
&mut restarting_mgr,
&mut state,
LogSeverity::Info,
diff --git a/fuzzers/inprocess/libfuzzer_libpng_norestart/src/lib.rs b/fuzzers/inprocess/libfuzzer_libpng_norestart/src/lib.rs
index 8b299b1517..5a195930c9 100644
--- a/fuzzers/inprocess/libfuzzer_libpng_norestart/src/lib.rs
+++ b/fuzzers/inprocess/libfuzzer_libpng_norestart/src/lib.rs
@@ -162,7 +162,7 @@ pub extern "C" fn libafl_main() {
);
let mut run_client = |state: Option<_>,
- mut restarting_mgr: LlmpRestartingEventManager<_, _, _, _>,
+ mut restarting_mgr: LlmpRestartingEventManager<_, _, _, _, _>,
client_description: ClientDescription| {
// Create an observation channel using the coverage map
let edges_observer =
diff --git a/fuzzers/inprocess/sqlite_centralized_multi_machine/src/lib.rs b/fuzzers/inprocess/sqlite_centralized_multi_machine/src/lib.rs
index 66d9963f07..096f06e5ad 100644
--- a/fuzzers/inprocess/sqlite_centralized_multi_machine/src/lib.rs
+++ b/fuzzers/inprocess/sqlite_centralized_multi_machine/src/lib.rs
@@ -157,7 +157,7 @@ pub extern "C" fn libafl_main() {
let mut secondary_run_client =
|state: Option<_>,
- mut mgr: CentralizedEventManager<_, _, _, _>,
+ mut mgr: CentralizedEventManager<_, _, _, _, _, _>,
_client_description: ClientDescription| {
// Create an observation channel using the coverage map
let edges_observer =
diff --git a/libafl/src/events/broker_hooks/centralized.rs b/libafl/src/events/broker_hooks/centralized.rs
index 5fbb437719..28381279b0 100644
--- a/libafl/src/events/broker_hooks/centralized.rs
+++ b/libafl/src/events/broker_hooks/centralized.rs
@@ -5,7 +5,6 @@ use core::{fmt::Debug, marker::PhantomData};
use libafl_bolts::{compress::GzipCompressor, llmp::LLMP_FLAG_COMPRESSED};
use libafl_bolts::{
llmp::{Flags, LlmpBrokerInner, LlmpHook, LlmpMsgHookResult, Tag},
- shmem::ShMemProvider,
ClientId, Error,
};
use serde::de::DeserializeOwned;
@@ -21,14 +20,13 @@ pub struct CentralizedLlmpHook {
phantom: PhantomData,
}
-impl LlmpHook for CentralizedLlmpHook
+impl LlmpHook for CentralizedLlmpHook
where
I: DeserializeOwned,
- SP: ShMemProvider,
{
fn on_new_message(
&mut self,
- _broker_inner: &mut LlmpBrokerInner,
+ _broker_inner: &mut LlmpBrokerInner,
client_id: ClientId,
msg_tag: &mut Tag,
_msg_flags: &mut Flags,
diff --git a/libafl/src/events/broker_hooks/centralized_multi_machine.rs b/libafl/src/events/broker_hooks/centralized_multi_machine.rs
index e522c62831..08fdf2f7bb 100644
--- a/libafl/src/events/broker_hooks/centralized_multi_machine.rs
+++ b/libafl/src/events/broker_hooks/centralized_multi_machine.rs
@@ -11,7 +11,6 @@ use libafl_bolts::llmp::LLMP_FLAG_COMPRESSED;
use libafl_bolts::{
llmp::{Flags, LlmpBrokerInner, LlmpHook, LlmpMsgHookResult, Tag, LLMP_FLAG_FROM_MM},
ownedref::OwnedRef,
- shmem::ShMemProvider,
ClientId, Error,
};
use serde::Serialize;
@@ -149,16 +148,15 @@ where
}
}
-impl LlmpHook for TcpMultiMachineLlmpSenderHook
+impl LlmpHook for TcpMultiMachineLlmpSenderHook
where
I: Input,
A: Clone + Display + ToSocketAddrs + Send + Sync + 'static,
- SP: ShMemProvider,
{
/// check for received messages, and forward them alongside the incoming message to inner.
fn on_new_message(
&mut self,
- _broker_inner: &mut LlmpBrokerInner,
+ _broker_inner: &mut LlmpBrokerInner,
_client_id: ClientId,
_msg_tag: &mut Tag,
_msg_flags: &mut Flags,
@@ -211,16 +209,15 @@ where
}
}
-impl LlmpHook for TcpMultiMachineLlmpReceiverHook
+impl LlmpHook for TcpMultiMachineLlmpReceiverHook
where
I: Input,
A: Clone + Display + ToSocketAddrs + Send + Sync + 'static,
- SP: ShMemProvider,
{
/// check for received messages, and forward them alongside the incoming message to inner.
fn on_new_message(
&mut self,
- _broker_inner: &mut LlmpBrokerInner,
+ _broker_inner: &mut LlmpBrokerInner,
_client_id: ClientId,
_msg_tag: &mut Tag,
_msg_flags: &mut Flags,
diff --git a/libafl/src/events/broker_hooks/mod.rs b/libafl/src/events/broker_hooks/mod.rs
index baac20f950..f65f1c131d 100644
--- a/libafl/src/events/broker_hooks/mod.rs
+++ b/libafl/src/events/broker_hooks/mod.rs
@@ -6,7 +6,6 @@ use core::marker::PhantomData;
use libafl_bolts::{compress::GzipCompressor, llmp::LLMP_FLAG_COMPRESSED};
use libafl_bolts::{
llmp::{Flags, LlmpBrokerInner, LlmpHook, LlmpMsgHookResult, Tag},
- shmem::ShMemProvider,
ClientId,
};
use serde::de::DeserializeOwned;
@@ -40,15 +39,14 @@ pub struct StdLlmpEventHook {
phantom: PhantomData,
}
-impl LlmpHook for StdLlmpEventHook
+impl LlmpHook for StdLlmpEventHook
where
I: DeserializeOwned,
- SP: ShMemProvider,
MT: Monitor,
{
fn on_new_message(
&mut self,
- _broker_inner: &mut LlmpBrokerInner,
+ _broker_inner: &mut LlmpBrokerInner,
client_id: ClientId,
msg_tag: &mut Tag,
#[cfg(feature = "llmp_compression")] msg_flags: &mut Flags,
diff --git a/libafl/src/events/centralized.rs b/libafl/src/events/centralized.rs
index 0dbede7466..63e80359d7 100644
--- a/libafl/src/events/centralized.rs
+++ b/libafl/src/events/centralized.rs
@@ -18,7 +18,7 @@ use libafl_bolts::{
};
use libafl_bolts::{
llmp::{LlmpClient, LlmpClientDescription, Tag},
- shmem::{NopShMemProvider, ShMemProvider},
+ shmem::{NopShMem, NopShMemProvider, ShMem, ShMemProvider},
tuples::{Handle, MatchNameRef},
ClientId,
};
@@ -46,13 +46,10 @@ pub(crate) const _LLMP_TAG_TO_MAIN: Tag = Tag(0x3453453);
/// A wrapper manager to implement a main-secondary architecture with another broker
#[derive(Debug)]
-pub struct CentralizedEventManager
-where
- SP: ShMemProvider,
-{
+pub struct CentralizedEventManager {
inner: EM,
/// The centralized LLMP client for inter process communication
- client: LlmpClient,
+ client: LlmpClient,
#[cfg(feature = "llmp_compression")]
compressor: GzipCompressor,
time_ref: Option>,
@@ -61,7 +58,16 @@ where
phantom: PhantomData<(I, S)>,
}
-impl CentralizedEventManager, NopShMemProvider> {
+impl
+ CentralizedEventManager<
+ NopEventManager,
+ (),
+ NopInput,
+ NopState,
+ NopShMem,
+ NopShMemProvider,
+ >
+{
/// Creates a builder for [`CentralizedEventManager`]
#[must_use]
pub fn builder() -> CentralizedEventManagerBuilder {
@@ -95,13 +101,14 @@ impl CentralizedEventManagerBuilder {
}
/// Creates a new [`CentralizedEventManager`].
+ #[expect(clippy::type_complexity)]
pub fn build_from_client(
self,
inner: EM,
hooks: EMH,
- client: LlmpClient,
+ client: LlmpClient,
time_obs: Option>,
- ) -> Result, Error>
+ ) -> Result, Error>
where
SP: ShMemProvider,
{
@@ -121,16 +128,17 @@ impl CentralizedEventManagerBuilder {
///
/// If the port is not yet bound, it will act as a broker; otherwise, it
/// will act as a client.
- pub fn build_on_port(
+ pub fn build_on_port(
self,
inner: EM,
hooks: EMH,
shmem_provider: SP,
port: u16,
time_obs: Option>,
- ) -> Result, Error>
+ ) -> Result, Error>
where
- SP: ShMemProvider,
+ SHM: ShMem,
+ SP: ShMemProvider,
{
let client = LlmpClient::create_attach_to_tcp(shmem_provider, port)?;
Self::build_from_client(self, inner, hooks, client, time_obs)
@@ -138,42 +146,43 @@ impl CentralizedEventManagerBuilder {
/// If a client respawns, it may reuse the existing connection, previously
/// stored by [`LlmpClient::to_env()`].
- pub fn build_existing_client_from_env(
+ pub fn build_existing_client_from_env(
self,
inner: EM,
hooks: EMH,
shmem_provider: SP,
env_name: &str,
time_obs: Option>,
- ) -> Result, Error>
+ ) -> Result, Error>
where
- SP: ShMemProvider,
+ SHM: ShMem,
+ SP: ShMemProvider,
{
let client = LlmpClient::on_existing_from_env(shmem_provider, env_name)?;
Self::build_from_client(self, inner, hooks, client, time_obs)
}
/// Create an existing client from description
- pub fn existing_client_from_description(
+ pub fn existing_client_from_description(
self,
inner: EM,
hooks: EMH,
shmem_provider: SP,
description: &LlmpClientDescription,
time_obs: Option>,
- ) -> Result, Error>
+ ) -> Result, Error>
where
- SP: ShMemProvider,
+ SHM: ShMem,
+ SP: ShMemProvider,
{
let client = LlmpClient::existing_client_from_description(shmem_provider, description)?;
Self::build_from_client(self, inner, hooks, client, time_obs)
}
}
-impl AdaptiveSerializer for CentralizedEventManager
+impl AdaptiveSerializer for CentralizedEventManager
where
EM: AdaptiveSerializer,
- SP: ShMemProvider,
{
fn serialization_time(&self) -> Duration {
self.inner.serialization_time()
@@ -206,13 +215,14 @@ where
}
}
-impl EventFirer for CentralizedEventManager
+impl EventFirer for CentralizedEventManager
where
EM: HasEventManagerId + EventFirer,
EMH: EventManagerHooksTuple,
- SP: ShMemProvider,
S: Stoppable,
I: Input,
+ SHM: ShMem,
+ SP: ShMemProvider,
{
fn should_send(&self) -> bool {
self.inner.should_send()
@@ -263,10 +273,11 @@ where
}
}
-impl EventRestarter for CentralizedEventManager
+impl EventRestarter for CentralizedEventManager
where
- SP: ShMemProvider,
EM: EventRestarter,
+ SHM: ShMem,
+ SP: ShMemProvider,
{
#[inline]
fn on_restart(&mut self, state: &mut S) -> Result<(), Error> {
@@ -276,10 +287,10 @@ where
}
}
-impl CanSerializeObserver for CentralizedEventManager
+impl CanSerializeObserver
+ for CentralizedEventManager
where
EM: AdaptiveSerializer,
- SP: ShMemProvider,
OT: Serialize + MatchNameRef,
{
fn serialize_observers(&mut self, observers: &OT) -> Result