daemon: reorg: use channels for comms instead of copying daemon arc/mutex
This commit is contained in:
@@ -2,7 +2,6 @@ mod dbus;
|
||||
mod daemon;
|
||||
|
||||
use std::future;
|
||||
use std::sync::mpsc;
|
||||
use log::LevelFilter;
|
||||
|
||||
use std::sync::Arc;
|
||||
@@ -24,22 +23,16 @@ fn initialize_logging() {
|
||||
async fn main() {
|
||||
initialize_logging();
|
||||
|
||||
let (sender, receiver) = mpsc::channel::<daemon::Event>();
|
||||
|
||||
// Create the daemon
|
||||
let daemon = Arc::new(
|
||||
Mutex::new(
|
||||
Daemon::new()
|
||||
.map_err(|e| {
|
||||
log::error!("Failed to start daemon: {}", e);
|
||||
std::process::exit(1);
|
||||
})
|
||||
.unwrap()
|
||||
)
|
||||
);
|
||||
let mut daemon = Daemon::new()
|
||||
.map_err(|e| {
|
||||
log::error!("Failed to start daemon: {}", e);
|
||||
std::process::exit(1);
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
// Create the server implementation
|
||||
let server = ServerImpl::new(daemon.clone(), sender);
|
||||
let server = ServerImpl::new(daemon.event_sender.clone());
|
||||
|
||||
// Register DBus interfaces with endpoint
|
||||
let endpoint = DbusEndpoint::new(server.clone());
|
||||
@@ -54,12 +47,7 @@ async fn main() {
|
||||
}
|
||||
).await;
|
||||
|
||||
tokio::spawn(async move {
|
||||
for event in receiver {
|
||||
// Important! Only lock the daemon when handling events.
|
||||
daemon.lock().await.handle_event(event).await;
|
||||
}
|
||||
});
|
||||
daemon.run().await;
|
||||
|
||||
future::pending::<()>().await;
|
||||
unreachable!()
|
||||
|
||||
Reference in New Issue
Block a user