diff --git a/qemu-display-listener/src/audio.rs b/qemu-display-listener/src/audio.rs index c743858..25db3df 100644 --- a/qemu-display-listener/src/audio.rs +++ b/qemu-display-listener/src/audio.rs @@ -3,7 +3,7 @@ use std::default::Default; use std::os::unix::net::UnixStream; use std::str::FromStr; use std::sync::mpsc::{self, Receiver, SendError}; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use std::{os::unix::io::AsRawFd, thread}; use zbus::{dbus_interface, dbus_proxy, zvariant::Fd}; @@ -294,7 +294,7 @@ impl Audio { .build() .unwrap(); let mut s = zbus::ObjectServer::new(&c); - let listener = AudioOutListener::new(tx); + let listener = AudioOutListener::new(Mutex::new(tx)); let err = listener.err(); s.at("/org/qemu/Display1/AudioOutListener", listener) .unwrap(); @@ -326,7 +326,7 @@ impl Audio { .build() .unwrap(); let mut s = zbus::ObjectServer::new(&c); - let listener = AudioInListener::new(tx); + let listener = AudioInListener::new(Mutex::new(tx)); let err = listener.err(); s.at("/org/qemu/Display1/AudioInListener", listener) .unwrap(); diff --git a/qemu-display-listener/src/clipboard.rs b/qemu-display-listener/src/clipboard.rs index e69b4d8..8542b39 100644 --- a/qemu-display-listener/src/clipboard.rs +++ b/qemu-display-listener/src/clipboard.rs @@ -2,7 +2,7 @@ use once_cell::sync::OnceCell; use serde_repr::{Deserialize_repr, Serialize_repr}; use std::convert::TryFrom; use std::sync::mpsc::{channel, Sender}; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use zbus::{dbus_interface, dbus_proxy, zvariant::ObjectPath}; use zvariant::derive::Type; @@ -53,7 +53,7 @@ pub enum ClipboardEvent { Request { selection: ClipboardSelection, mimes: Vec, - tx: Sender)>>, + tx: Mutex)>>>, }, } @@ -94,7 +94,7 @@ impl> ClipboardListener { self.send(ClipboardEvent::Request { selection, mimes, - tx, + tx: Mutex::new(tx), }); rx.recv() .map_err(|e| zbus::fdo::Error::Failed(format!("Request recv failed: {}", e)))? diff --git a/qemu-display-listener/src/console.rs b/qemu-display-listener/src/console.rs index ab52d93..984adf7 100644 --- a/qemu-display-listener/src/console.rs +++ b/qemu-display-listener/src/console.rs @@ -1,6 +1,7 @@ use std::convert::TryFrom; use std::os::unix::net::UnixStream; use std::sync::mpsc::{self, Receiver, Sender}; +use std::sync::Mutex; use std::{os::unix::io::AsRawFd, thread}; use zbus::{ @@ -122,7 +123,7 @@ impl Console { .build() .unwrap(); let mut s = zbus::ObjectServer::new(&c); - let listener = ConsoleListener::new(tx, wait_rx); + let listener = ConsoleListener::new(Mutex::new(tx), wait_rx); let err = listener.err(); s.at("/org/qemu/Display1/Listener", listener).unwrap(); loop { diff --git a/qemu-display-listener/src/console_listener.rs b/qemu-display-listener/src/console_listener.rs index 052d0d6..738cd91 100644 --- a/qemu-display-listener/src/console_listener.rs +++ b/qemu-display-listener/src/console_listener.rs @@ -3,7 +3,7 @@ use std::ops::Drop; use std::os::unix::io::IntoRawFd; use std::os::unix::io::{AsRawFd, RawFd}; use std::sync::mpsc::{Receiver, RecvError, SendError}; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use derivative::Derivative; use zbus::{dbus_interface, zvariant::Fd}; @@ -94,7 +94,7 @@ pub enum ConsoleEvent { #[derive(Debug)] pub(crate) struct ConsoleListener> { tx: E, - wait_rx: Receiver<()>, + wait_rx: Mutex>, err: Arc>>, } @@ -188,7 +188,7 @@ impl> ConsoleListener { pub(crate) fn new(tx: E, wait_rx: Receiver<()>) -> Self { ConsoleListener { tx, - wait_rx, + wait_rx: Mutex::new(wait_rx), err: Default::default(), } } @@ -200,7 +200,7 @@ impl> ConsoleListener { } fn wait(&mut self) -> Result<(), RecvError> { - self.wait_rx.recv() + self.wait_rx.lock().unwrap().recv() } pub fn err(&self) -> Arc>> { diff --git a/qemu-display-listener/src/event_sender.rs b/qemu-display-listener/src/event_sender.rs index 78a8828..c74797f 100644 --- a/qemu-display-listener/src/event_sender.rs +++ b/qemu-display-listener/src/event_sender.rs @@ -1,21 +1,22 @@ use std::sync::mpsc::{SendError, Sender}; +use std::sync::Mutex; -pub(crate) trait EventSender: Send { +pub(crate) trait EventSender: Send + Sync { type Event; fn send_event(&self, t: Self::Event) -> Result<(), SendError>; } -impl EventSender for Sender { +impl EventSender for Mutex> { type Event = T; fn send_event(&self, t: Self::Event) -> Result<(), SendError> { - self.send(t) + self.lock().unwrap().send(t) } } #[cfg(feature = "glib")] -impl EventSender for glib::Sender { +impl EventSender for glib::Sender { type Event = T; fn send_event(&self, t: Self::Event) -> Result<(), SendError> { diff --git a/qemu-rdw/src/clipboard.rs b/qemu-rdw/src/clipboard.rs index e6f20fb..43637d1 100644 --- a/qemu-rdw/src/clipboard.rs +++ b/qemu-rdw/src/clipboard.rs @@ -107,7 +107,7 @@ impl Handler { Err(qdl::Error::Failed(format!("{}", e))) } }; - let _ = tx.send(reply); + let _ = tx.lock().unwrap().send(reply); }); } }