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);
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