Mesa (master): st/nine: Flush the queue at device dtor

Axel Davy axeldavy at kemper.freedesktop.org
Thu Jan 12 19:33:25 UTC 2017


Module: Mesa
Branch: master
Commit: 5f4359ea0ed54b06d443e0ba040eb73406fc3e34
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f4359ea0ed54b06d443e0ba040eb73406fc3e34

Author: Axel Davy <axel.davy at ens.fr>
Date:   Wed Dec 28 18:58:48 2016 +0100

st/nine: Flush the queue at device dtor

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 at ens.fr>

---

 src/gallium/state_trackers/nine/device9.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c
index b150faa..92bc72c 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -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;




More information about the mesa-commit mailing list