drm/ttm: Fix a sync object leak.
authorThomas Hellstrom <thellstrom@vmware.com>
Mon, 3 Aug 2009 10:39:06 +0000 (12:39 +0200)
committerDave Airlie <airlied@redhat.com>
Tue, 4 Aug 2009 03:41:05 +0000 (13:41 +1000)
If there are multiple simultaneous waiters for the same buffer object,
a temporary reference to its sync object may be leaked.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/ttm/ttm_bo.c

index 6538d42..aa82d53 100644 (file)
@@ -1575,6 +1575,10 @@ int ttm_bo_wait(struct ttm_buffer_object *bo,
                        driver->sync_obj_unref(&sync_obj);
                        driver->sync_obj_unref(&tmp_obj);
                        spin_lock(&bo->lock);
+               } else {
+                       spin_unlock(&bo->lock);
+                       driver->sync_obj_unref(&sync_obj);
+                       spin_lock(&bo->lock);
                }
        }
        return 0;