client/pool-buffer: munmap in destroy_buffer

This commit is contained in:
emersion 2018-05-25 19:42:23 +01:00
parent 8df2238956
commit 36d5d4b40f
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 8 additions and 1 deletions

View file

@ -72,7 +72,7 @@ static struct pool_buffer *create_buffer(struct wl_shm *shm,
struct pool_buffer *buf, int32_t width, int32_t height, struct pool_buffer *buf, int32_t width, int32_t height,
uint32_t format) { uint32_t format) {
uint32_t stride = width * 4; uint32_t stride = width * 4;
uint32_t size = stride * height; size_t size = stride * height;
char *name; char *name;
int fd = create_pool_file(size, &name); int fd = create_pool_file(size, &name);
@ -87,8 +87,10 @@ static struct pool_buffer *create_buffer(struct wl_shm *shm,
free(name); free(name);
fd = -1; fd = -1;
buf->size = size;
buf->width = width; buf->width = width;
buf->height = height; buf->height = height;
buf->data = data;
buf->surface = cairo_image_surface_create_for_data(data, buf->surface = cairo_image_surface_create_for_data(data,
CAIRO_FORMAT_ARGB32, width, height, stride); CAIRO_FORMAT_ARGB32, width, height, stride);
buf->cairo = cairo_create(buf->surface); buf->cairo = cairo_create(buf->surface);
@ -111,6 +113,9 @@ void destroy_buffer(struct pool_buffer *buffer) {
if (buffer->pango) { if (buffer->pango) {
g_object_unref(buffer->pango); g_object_unref(buffer->pango);
} }
if (buffer->data) {
munmap(buffer->data, buffer->size);
}
memset(buffer, 0, sizeof(struct pool_buffer)); memset(buffer, 0, sizeof(struct pool_buffer));
} }

View file

@ -12,6 +12,8 @@ struct pool_buffer {
cairo_t *cairo; cairo_t *cairo;
PangoContext *pango; PangoContext *pango;
uint32_t width, height; uint32_t width, height;
void *data;
size_t size;
bool busy; bool busy;
}; };