anv/bo_pool: Allow freeing BOs where the anv_bo is in the BO itself
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 7 Mar 2016 22:56:58 +0000 (14:56 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 8 Mar 2016 06:23:44 +0000 (22:23 -0800)
src/intel/vulkan/anv_allocator.c

index 3b62bda3e93226bd333308c4317d0583fafba725..d7c09103344c07b0d07a4e8c355d7fc63e7d067f 100644 (file)
@@ -853,11 +853,13 @@ anv_bo_pool_alloc(struct anv_bo_pool *pool, struct anv_bo *bo)
 }
 
 void
-anv_bo_pool_free(struct anv_bo_pool *pool, const struct anv_bo *bo)
+anv_bo_pool_free(struct anv_bo_pool *pool, const struct anv_bo *bo_in)
 {
-   struct bo_pool_bo_link *link = bo->map;
-   link->bo = *bo;
+   /* Make a copy in case the anv_bo happens to be storred in the BO */
+   struct anv_bo bo = *bo_in;
+   struct bo_pool_bo_link *link = bo.map;
+   link->bo = bo;
 
-   VG(VALGRIND_MEMPOOL_FREE(pool, bo->map));
+   VG(VALGRIND_MEMPOOL_FREE(pool, bo.map));
    anv_ptr_free_list_push(&pool->free_list, link);
 }