1
0
Fork 0
forked from wry/wry

io-uring: add sendmsg

This commit is contained in:
Julian Orth 2022-05-13 17:37:20 +02:00
parent 9416efeabe
commit e4f97287bc
17 changed files with 493 additions and 191 deletions

View file

@ -23,7 +23,7 @@ use {
state::State,
tree::ToplevelNode,
utils::{
bitflags::BitflagsExt, clonecell::CloneCell, copyhashmap::CopyHashMap,
bitflags::BitflagsExt, buf::Buf, clonecell::CloneCell, copyhashmap::CopyHashMap,
errorfmt::ErrorFmt, linkedlist::LinkedList, numcell::NumCell, oserror::OsError,
rc_eq::rc_eq, tri::Try,
},
@ -1678,7 +1678,7 @@ impl Wm {
log::error!("Could not get converted property: {}", e);
return Ok(());
}
let data = Rc::new(data);
let mut data = Buf::from_slice(&data);
for transfer in transfers {
if event.target != transfer.mime_type {
log::error!("Conversion yielded an incompatible mime type");
@ -1687,7 +1687,7 @@ impl Wm {
let id = self.transfer_ids.fetch_add(1);
let transfer = XToWaylandTransfer {
id,
data: data.clone(),
data: data.slice(..),
fd: transfer.fd,
state: self.state.clone(),
shared: self.shared.clone(),
@ -2372,22 +2372,19 @@ impl Wm {
struct XToWaylandTransfer {
id: u64,
data: Rc<Vec<u8>>,
data: Buf,
fd: Rc<OwnedFd>,
state: Rc<State>,
shared: Rc<XwmShared>,
}
impl XToWaylandTransfer {
async fn run(self) {
async fn run(mut self) {
let timeout = self.state.wheel.timeout(5000);
pin_mut!(timeout);
let mut pos = 0;
while pos < self.data.len() {
let f1 = self
.state
.ring
.write(&self.fd, &self.data, pos, self.data.len() - pos);
let f1 = self.state.ring.write(&self.fd, self.data.slice(pos..));
pin_mut!(f1);
match future::select(f1, &mut timeout).await {
Either::Left((res, _)) => match res.merge() {