From f085fc9dd2ac05405312ab12ad9dd9f1ad205e2e Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Thu, 31 Mar 2022 14:14:17 +0200 Subject: [PATCH] libdrm/iris: free objects in Drm_call destructor Make sure to remove all buffers, sync objects, and contexts during destruction. Fixes #4466 --- repos/libports/src/lib/libdrm/ioctl_iris.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/repos/libports/src/lib/libdrm/ioctl_iris.cc b/repos/libports/src/lib/libdrm/ioctl_iris.cc index 169ec3ff7e..bb96d0d1c5 100644 --- a/repos/libports/src/lib/libdrm/ioctl_iris.cc +++ b/repos/libports/src/lib/libdrm/ioctl_iris.cc @@ -1247,6 +1247,21 @@ class Drm_call Genode::warning("syncobject 0 not reserved"); } + ~Drm_call() + { + while(_buffer_space.apply_any([&] (Buffer &buffer) { + _free_buffer(buffer.id()); + })); + + while (_context_space.apply_any([&] (Drm::Context &context) { + Libc::close(context.fd()); + destroy(_heap, &context); + })); + + while (_sync_objects.apply_any([&] (Sync_obj &obj) { + destroy(_heap, &obj); })); + } + int lseek(int fd, off_t offset, int whence) { if (fd != prime_fd || offset || whence != SEEK_END)