Mesa (10.0): nouveau: avoid leaking fences while waiting

Ian Romanick idr at kemper.freedesktop.org
Fri Dec 6 19:16:30 UTC 2013


Module: Mesa
Branch: 10.0
Commit: 05d2a796a0a1c198b9123394d49b7b6407853c14
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=05d2a796a0a1c198b9123394d49b7b6407853c14

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Fri Nov 29 18:49:44 2013 -0500

nouveau: avoid leaking fences while waiting

This fixes a memory leak in some situations. Also avoids emitting an
extra fence if the kick handler does the call to nouveau_fence_next
itself.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Cc: "9.2 10.0" <mesa-stable at lists.freedesktop.org>
(cherry picked from commit ce6dd69697ae62d9336bbd4f5808bc4d75cdcc04)

---

 src/gallium/drivers/nouveau/nouveau_fence.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/nouveau/nouveau_fence.c b/src/gallium/drivers/nouveau/nouveau_fence.c
index dea146c..c686710 100644
--- a/src/gallium/drivers/nouveau/nouveau_fence.c
+++ b/src/gallium/drivers/nouveau/nouveau_fence.c
@@ -189,16 +189,15 @@ nouveau_fence_wait(struct nouveau_fence *fence)
    /* wtf, someone is waiting on a fence in flush_notify handler? */
    assert(fence->state != NOUVEAU_FENCE_STATE_EMITTING);
 
-   if (fence->state < NOUVEAU_FENCE_STATE_EMITTED) {
+   if (fence->state < NOUVEAU_FENCE_STATE_EMITTED)
       nouveau_fence_emit(fence);
 
-      if (fence == screen->fence.current)
-         nouveau_fence_new(screen, &screen->fence.current, FALSE);
-   }
-   if (fence->state < NOUVEAU_FENCE_STATE_FLUSHED) {
+   if (fence->state < NOUVEAU_FENCE_STATE_FLUSHED)
       if (nouveau_pushbuf_kick(screen->pushbuf, screen->pushbuf->channel))
          return FALSE;
-   }
+
+   if (fence == screen->fence.current)
+      nouveau_fence_next(screen);
 
    do {
       nouveau_fence_update(screen, FALSE);




More information about the mesa-commit mailing list