shm: scroll: no need to instantiate a new buffer when ftruncate() fails

This commit is contained in:
Daniel Eklöf 2020-03-22 20:32:11 +01:00
parent ed987b2de7
commit 3b9be09b06
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

22
shm.c
View file

@ -289,27 +289,7 @@ shm_scroll(struct wl_shm *shm, struct buffer *buf, int rows)
if (ftruncate(buf->fd, new_offset + buf->size) < 0) {
LOG_ERRNO("failed increase memfd size from %zu -> %zu",
buf->offset + buf->size, new_offset + buf->size);
/* Instantiate a new buffer and copy over our content */
struct buffer *fresh_buf = shm_get_buffer(shm, buf->width, buf->height, buf->cookie);
memcpy(fresh_buf->mmapped,
(const uint8_t *)buf->mmapped + rows * buf->stride,
buf->size - rows * buf->stride);
buffer_destroy(buf);
*buf = *fresh_buf;
assert(false);
/* Mark copied buffer for deletion, but make sure we don't
* free any of its resources */
fresh_buf->pix = NULL;
fresh_buf->wl_buf = NULL;
fresh_buf->real_mmapped = MAP_FAILED;
fresh_buf->fd = -1;
fresh_buf->purge = true;
return true;
return false;
}
#if TIME_SCROLL