Merge pull request #651 from mahkoh/jorth/shm-pool-len
wl_shm: save the actually requested pool size
This commit is contained in:
commit
a2e21cb926
1 changed files with 7 additions and 3 deletions
|
|
@ -9,7 +9,7 @@ use {
|
||||||
utils::clonecell::CloneCell,
|
utils::clonecell::CloneCell,
|
||||||
wire::{WlShmPoolId, wl_shm_pool::*},
|
wire::{WlShmPoolId, wl_shm_pool::*},
|
||||||
},
|
},
|
||||||
std::rc::Rc,
|
std::{cell::Cell, rc::Rc},
|
||||||
thiserror::Error,
|
thiserror::Error,
|
||||||
uapi::OwnedFd,
|
uapi::OwnedFd,
|
||||||
};
|
};
|
||||||
|
|
@ -18,6 +18,7 @@ pub struct WlShmPool {
|
||||||
id: WlShmPoolId,
|
id: WlShmPoolId,
|
||||||
client: Rc<Client>,
|
client: Rc<Client>,
|
||||||
fd: Rc<OwnedFd>,
|
fd: Rc<OwnedFd>,
|
||||||
|
requested_len: Cell<usize>,
|
||||||
mem: CloneCell<Rc<ClientMem>>,
|
mem: CloneCell<Rc<ClientMem>>,
|
||||||
pub tracker: Tracker<Self>,
|
pub tracker: Tracker<Self>,
|
||||||
version: Version,
|
version: Version,
|
||||||
|
|
@ -34,6 +35,7 @@ impl WlShmPool {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
id,
|
id,
|
||||||
client: client.clone(),
|
client: client.clone(),
|
||||||
|
requested_len: Cell::new(len),
|
||||||
mem: CloneCell::new(Rc::new(ClientMem::new(
|
mem: CloneCell::new(Rc::new(ClientMem::new(
|
||||||
&fd,
|
&fd,
|
||||||
len,
|
len,
|
||||||
|
|
@ -85,12 +87,14 @@ impl WlShmPoolRequestHandler for WlShmPool {
|
||||||
if req.size < 0 {
|
if req.size < 0 {
|
||||||
return Err(WlShmPoolError::NegativeSize);
|
return Err(WlShmPoolError::NegativeSize);
|
||||||
}
|
}
|
||||||
if (req.size as usize) < self.mem.get().len() {
|
let len = req.size as usize;
|
||||||
|
if len < self.requested_len.get() {
|
||||||
return Err(WlShmPoolError::CannotShrink);
|
return Err(WlShmPoolError::CannotShrink);
|
||||||
}
|
}
|
||||||
|
self.requested_len.set(len);
|
||||||
self.mem.set(Rc::new(ClientMem::new(
|
self.mem.set(Rc::new(ClientMem::new(
|
||||||
&self.fd,
|
&self.fd,
|
||||||
req.size as usize,
|
len,
|
||||||
false,
|
false,
|
||||||
Some(&self.client),
|
Some(&self.client),
|
||||||
Some(&self.client.state.cpu_worker),
|
Some(&self.client.state.cpu_worker),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue