mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-04-21 06:46:33 -04:00
shm: Disallow shrinking shm pools
Unused shm space will be automatically reclaimed if unused or can be explicitly returned by using fallocate FALLOC_FL_PUNCH_HOLE. https://bugs.freedesktop.org/show_bug.cgi?id=74632
This commit is contained in:
parent
c1aa1291a1
commit
24cdbe3d69
2 changed files with 10 additions and 3 deletions
|
|
@ -246,7 +246,8 @@
|
||||||
<description summary="change the size of the pool mapping">
|
<description summary="change the size of the pool mapping">
|
||||||
This request will cause the server to remap the backing memory
|
This request will cause the server to remap the backing memory
|
||||||
for the pool from the file descriptor passed when the pool was
|
for the pool from the file descriptor passed when the pool was
|
||||||
created, but using the new size.
|
created, but using the new size. This request can only be
|
||||||
|
used to make the pool bigger.
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
<arg name="size" type="int"/>
|
<arg name="size" type="int"/>
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ struct wl_shm_pool {
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
int refcount;
|
int refcount;
|
||||||
char *data;
|
char *data;
|
||||||
int size;
|
int32_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wl_shm_buffer {
|
struct wl_shm_buffer {
|
||||||
|
|
@ -195,8 +195,14 @@ shm_pool_resize(struct wl_client *client, struct wl_resource *resource,
|
||||||
struct wl_shm_pool *pool = wl_resource_get_user_data(resource);
|
struct wl_shm_pool *pool = wl_resource_get_user_data(resource);
|
||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
data = mremap(pool->data, pool->size, size, MREMAP_MAYMOVE);
|
if (size < pool->size) {
|
||||||
|
wl_resource_post_error(resource,
|
||||||
|
WL_SHM_ERROR_INVALID_FD,
|
||||||
|
"shrinking pool invalid");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = mremap(pool->data, pool->size, size, MREMAP_MAYMOVE);
|
||||||
if (data == MAP_FAILED) {
|
if (data == MAP_FAILED) {
|
||||||
wl_resource_post_error(resource,
|
wl_resource_post_error(resource,
|
||||||
WL_SHM_ERROR_INVALID_FD,
|
WL_SHM_ERROR_INVALID_FD,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue