st/nine: Flush the queue at device dtor
authorAxel Davy <axel.davy@ens.fr>
Wed, 28 Dec 2016 17:58:48 +0000 (18:58 +0100)
committerAxel Davy <axel.davy@ens.fr>
Thu, 12 Jan 2017 19:33:11 +0000 (20:33 +0100)
Flush the queue to get refcounts right, and properly
release the items, instead of throwing away all pending
commands.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/device9.c

index b150faaf49dc862bbead3101cebe5fd262c7ad3d..92bc72ce28d656ba8ab54bac2a0315bf0297b912 100644 (file)
@@ -535,8 +535,13 @@ NineDevice9_dtor( struct NineDevice9 *This )
 
     DBG("This=%p\n", This);
 
-    /* Do not call nine_csmt_process here. The device is dead! */
+    /* Flush all pending commands to get refcount right,
+     * and properly release bound objects. It is ok to still
+     * execute commands while we are in device dtor, because
+     * we haven't released anything yet. Note that no pending
+     * command can increase the device refcount. */
     if (This->csmt_active && This->csmt_ctx) {
+        nine_csmt_process(This);
         nine_csmt_destroy(This, This->csmt_ctx);
         This->csmt_active = FALSE;
         This->csmt_ctx = NULL;