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:
Kristian Høgsberg 2014-04-07 14:42:20 -07:00
parent c1aa1291a1
commit 24cdbe3d69
2 changed files with 10 additions and 3 deletions

View file

@ -246,7 +246,8 @@
<description summary="change the size of the pool mapping">
This request will cause the server to remap the backing memory
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>
<arg name="size" type="int"/>

View file

@ -50,7 +50,7 @@ struct wl_shm_pool {
struct wl_resource *resource;
int refcount;
char *data;
int size;
int32_t size;
};
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);
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) {
wl_resource_post_error(resource,
WL_SHM_ERROR_INVALID_FD,