1
0
mirror of https://gitlab.com/marcandre.lureau/qemu-display.git synced 2025-04-14 08:44:46 +00:00

qdl: make interfaces Sync

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau 2021-08-14 00:44:55 +04:00
parent 998a8e7ddd
commit fb517a13db
6 changed files with 18 additions and 16 deletions

View File

@ -3,7 +3,7 @@ use std::default::Default;
use std::os::unix::net::UnixStream; use std::os::unix::net::UnixStream;
use std::str::FromStr; use std::str::FromStr;
use std::sync::mpsc::{self, Receiver, SendError}; use std::sync::mpsc::{self, Receiver, SendError};
use std::sync::Arc; use std::sync::{Arc, Mutex};
use std::{os::unix::io::AsRawFd, thread}; use std::{os::unix::io::AsRawFd, thread};
use zbus::{dbus_interface, dbus_proxy, zvariant::Fd}; use zbus::{dbus_interface, dbus_proxy, zvariant::Fd};
@ -294,7 +294,7 @@ impl Audio {
.build() .build()
.unwrap(); .unwrap();
let mut s = zbus::ObjectServer::new(&c); let mut s = zbus::ObjectServer::new(&c);
let listener = AudioOutListener::new(tx); let listener = AudioOutListener::new(Mutex::new(tx));
let err = listener.err(); let err = listener.err();
s.at("/org/qemu/Display1/AudioOutListener", listener) s.at("/org/qemu/Display1/AudioOutListener", listener)
.unwrap(); .unwrap();
@ -326,7 +326,7 @@ impl Audio {
.build() .build()
.unwrap(); .unwrap();
let mut s = zbus::ObjectServer::new(&c); let mut s = zbus::ObjectServer::new(&c);
let listener = AudioInListener::new(tx); let listener = AudioInListener::new(Mutex::new(tx));
let err = listener.err(); let err = listener.err();
s.at("/org/qemu/Display1/AudioInListener", listener) s.at("/org/qemu/Display1/AudioInListener", listener)
.unwrap(); .unwrap();

View File

@ -2,7 +2,7 @@ use once_cell::sync::OnceCell;
use serde_repr::{Deserialize_repr, Serialize_repr}; use serde_repr::{Deserialize_repr, Serialize_repr};
use std::convert::TryFrom; use std::convert::TryFrom;
use std::sync::mpsc::{channel, Sender}; use std::sync::mpsc::{channel, Sender};
use std::sync::Arc; use std::sync::{Arc, Mutex};
use zbus::{dbus_interface, dbus_proxy, zvariant::ObjectPath}; use zbus::{dbus_interface, dbus_proxy, zvariant::ObjectPath};
use zvariant::derive::Type; use zvariant::derive::Type;
@ -53,7 +53,7 @@ pub enum ClipboardEvent {
Request { Request {
selection: ClipboardSelection, selection: ClipboardSelection,
mimes: Vec<String>, mimes: Vec<String>,
tx: Sender<Result<(String, Vec<u8>)>>, tx: Mutex<Sender<Result<(String, Vec<u8>)>>>,
}, },
} }
@ -94,7 +94,7 @@ impl<E: 'static + EventSender<Event = ClipboardEvent>> ClipboardListener<E> {
self.send(ClipboardEvent::Request { self.send(ClipboardEvent::Request {
selection, selection,
mimes, mimes,
tx, tx: Mutex::new(tx),
}); });
rx.recv() rx.recv()
.map_err(|e| zbus::fdo::Error::Failed(format!("Request recv failed: {}", e)))? .map_err(|e| zbus::fdo::Error::Failed(format!("Request recv failed: {}", e)))?

View File

@ -1,6 +1,7 @@
use std::convert::TryFrom; use std::convert::TryFrom;
use std::os::unix::net::UnixStream; use std::os::unix::net::UnixStream;
use std::sync::mpsc::{self, Receiver, Sender}; use std::sync::mpsc::{self, Receiver, Sender};
use std::sync::Mutex;
use std::{os::unix::io::AsRawFd, thread}; use std::{os::unix::io::AsRawFd, thread};
use zbus::{ use zbus::{
@ -122,7 +123,7 @@ impl Console {
.build() .build()
.unwrap(); .unwrap();
let mut s = zbus::ObjectServer::new(&c); 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(); let err = listener.err();
s.at("/org/qemu/Display1/Listener", listener).unwrap(); s.at("/org/qemu/Display1/Listener", listener).unwrap();
loop { loop {

View File

@ -3,7 +3,7 @@ use std::ops::Drop;
use std::os::unix::io::IntoRawFd; use std::os::unix::io::IntoRawFd;
use std::os::unix::io::{AsRawFd, RawFd}; use std::os::unix::io::{AsRawFd, RawFd};
use std::sync::mpsc::{Receiver, RecvError, SendError}; use std::sync::mpsc::{Receiver, RecvError, SendError};
use std::sync::Arc; use std::sync::{Arc, Mutex};
use derivative::Derivative; use derivative::Derivative;
use zbus::{dbus_interface, zvariant::Fd}; use zbus::{dbus_interface, zvariant::Fd};
@ -94,7 +94,7 @@ pub enum ConsoleEvent {
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct ConsoleListener<E: EventSender<Event = ConsoleEvent>> { pub(crate) struct ConsoleListener<E: EventSender<Event = ConsoleEvent>> {
tx: E, tx: E,
wait_rx: Receiver<()>, wait_rx: Mutex<Receiver<()>>,
err: Arc<OnceCell<SendError<ConsoleEvent>>>, err: Arc<OnceCell<SendError<ConsoleEvent>>>,
} }
@ -188,7 +188,7 @@ impl<E: EventSender<Event = ConsoleEvent>> ConsoleListener<E> {
pub(crate) fn new(tx: E, wait_rx: Receiver<()>) -> Self { pub(crate) fn new(tx: E, wait_rx: Receiver<()>) -> Self {
ConsoleListener { ConsoleListener {
tx, tx,
wait_rx, wait_rx: Mutex::new(wait_rx),
err: Default::default(), err: Default::default(),
} }
} }
@ -200,7 +200,7 @@ impl<E: EventSender<Event = ConsoleEvent>> ConsoleListener<E> {
} }
fn wait(&mut self) -> Result<(), RecvError> { fn wait(&mut self) -> Result<(), RecvError> {
self.wait_rx.recv() self.wait_rx.lock().unwrap().recv()
} }
pub fn err(&self) -> Arc<OnceCell<SendError<ConsoleEvent>>> { pub fn err(&self) -> Arc<OnceCell<SendError<ConsoleEvent>>> {

View File

@ -1,21 +1,22 @@
use std::sync::mpsc::{SendError, Sender}; use std::sync::mpsc::{SendError, Sender};
use std::sync::Mutex;
pub(crate) trait EventSender: Send { pub(crate) trait EventSender: Send + Sync {
type Event; type Event;
fn send_event(&self, t: Self::Event) -> Result<(), SendError<Self::Event>>; fn send_event(&self, t: Self::Event) -> Result<(), SendError<Self::Event>>;
} }
impl<T: Send> EventSender for Sender<T> { impl<T: Send + Sync> EventSender for Mutex<Sender<T>> {
type Event = T; type Event = T;
fn send_event(&self, t: Self::Event) -> Result<(), SendError<Self::Event>> { fn send_event(&self, t: Self::Event) -> Result<(), SendError<Self::Event>> {
self.send(t) self.lock().unwrap().send(t)
} }
} }
#[cfg(feature = "glib")] #[cfg(feature = "glib")]
impl<T: Send> EventSender for glib::Sender<T> { impl<T: Send + Sync> EventSender for glib::Sender<T> {
type Event = T; type Event = T;
fn send_event(&self, t: Self::Event) -> Result<(), SendError<Self::Event>> { fn send_event(&self, t: Self::Event) -> Result<(), SendError<Self::Event>> {

View File

@ -107,7 +107,7 @@ impl Handler {
Err(qdl::Error::Failed(format!("{}", e))) Err(qdl::Error::Failed(format!("{}", e)))
} }
}; };
let _ = tx.send(reply); let _ = tx.lock().unwrap().send(reply);
}); });
} }
} }