Untitled
// After opening dmabuf_fd void *buffer = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, dmabuf_fd, 0); if (buffer == MAP_FAILED) { wlr_log_errno(WLR_ERROR, "Failed to mmap udmabuf"); close(dmabuf_fd); goto err_memfd; } // Ensure cleanup in buffer_destroy static void buffer_destroy(struct wlr_buffer *wlr_buffer) { struct wlr_udmabuf_buffer *buffer = wl_container_of(wlr_buffer, buffer, base); munmap(buffer->mapped_data, buffer->size); wlr_dmabuf_attributes_finish(&buffer->dmabuf); close(buffer->shm.fd); free(buffer); } // Add to struct wlr_udmabuf_buffer struct wlr_udmabuf_buffer { // ... existing fields ... void *mapped_data; };
Leave a Comment