Untitled

 avatar
unknown
plain_text
a month ago
705 B
1
Indexable
// 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