Index: uspace/srv/hid/display/display.c
===================================================================
--- uspace/srv/hid/display/display.c	(revision 06176e1f247c6c0450877aea38262568fcb8b9d7)
+++ uspace/srv/hid/display/display.c	(revision 4e7b0ad8c2c453472fec59e7c0bfc7b56f327abc)
@@ -116,8 +116,19 @@
 void ds_display_destroy(ds_display_t *disp)
 {
+	int i;
+
 	assert(list_empty(&disp->clients));
 	assert(list_empty(&disp->wmclients));
 	assert(list_empty(&disp->seats));
-	/* XXX destroy cursors */
+	assert(list_empty(&disp->ddevs));
+	assert(list_empty(&disp->seats));
+	assert(list_empty(&disp->windows));
+
+	/* Destroy cursors */
+	for (i = 0; i < dcurs_limit; i++) {
+		ds_cursor_destroy(disp->cursor[i]);
+		disp->cursor[i] = NULL;
+	}
+
 	gfx_color_delete(disp->bg_color);
 	free(disp);
Index: uspace/srv/hid/display/test/cursor.c
===================================================================
--- uspace/srv/hid/display/test/cursor.c	(revision 06176e1f247c6c0450877aea38262568fcb8b9d7)
+++ uspace/srv/hid/display/test/cursor.c	(revision 4e7b0ad8c2c453472fec59e7c0bfc7b56f327abc)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2020 Jiri Svoboda
+ * Copyright (c) 2022 Jiri Svoboda
  * All rights reserved.
  *
@@ -117,4 +117,5 @@
 	PCUT_ASSERT_TRUE(resp.render_called);
 
+	ds_ddev_close(ddev);
 	ds_cursor_destroy(cursor);
 	ds_display_destroy(disp);
@@ -167,4 +168,5 @@
 	PCUT_ASSERT_FALSE(resp.render_called);
 
+	ds_ddev_close(ddev);
 	ds_cursor_destroy(cursor);
 	ds_display_destroy(disp);
