diff --git a/src/freedreno/drm/freedreno_device.c b/src/freedreno/drm/freedreno_device.c index 21bee70be78..e3d9e249a0b 100644 --- a/src/freedreno/drm/freedreno_device.c +++ b/src/freedreno/drm/freedreno_device.c @@ -139,12 +139,12 @@ fd_device_purge(struct fd_device *dev) static void fd_device_del_impl(struct fd_device *dev) { - int close_fd = dev->closefd ? dev->fd : -1; - simple_mtx_assert_locked(&table_lock); assert(list_is_empty(&dev->deferred_submits)); + dev->funcs->destroy(dev); + if (dev->suballoc_bo) fd_bo_del_locked(dev->suballoc_bo); @@ -152,11 +152,14 @@ fd_device_del_impl(struct fd_device *dev) fd_bo_cache_cleanup(&dev->ring_cache, 0); _mesa_hash_table_destroy(dev->handle_table, NULL); _mesa_hash_table_destroy(dev->name_table, NULL); + if (util_queue_is_initialized(&dev->submit_queue)) util_queue_destroy(&dev->submit_queue); - dev->funcs->destroy(dev); - if (close_fd >= 0) - close(close_fd); + + if (dev->closefd) + close(dev->fd); + + free(dev); } void diff --git a/src/freedreno/drm/msm/msm_device.c b/src/freedreno/drm/msm/msm_device.c index dcb11fd8411..c330c8be565 100644 --- a/src/freedreno/drm/msm/msm_device.c +++ b/src/freedreno/drm/msm/msm_device.c @@ -33,8 +33,6 @@ static void msm_device_destroy(struct fd_device *dev) { - struct msm_device *msm_dev = to_msm_device(dev); - free(msm_dev); } static const struct fd_device_funcs funcs = {