libdrm-radeon: unref return current BO ptr to reflect BO destruction
authorJerome Glisse <glisse@freedesktop.org>
Sat, 15 Nov 2008 09:38:44 +0000 (10:38 +0100)
committerJerome Glisse <glisse@freedesktop.org>
Sat, 15 Nov 2008 09:39:37 +0000 (10:39 +0100)
libdrm/radeon/radeon_bo.h
libdrm/radeon/radeon_bo_gem.c
libdrm/radeon/radeon_bo_gem.h
libdrm/radeon/radeon_cs_gem.c
libdrm/radeon/radeon_cs_gem.h

index ed785034f370f9a630615cb2de17496889afd65a..523cf38e6861e3d7fb356097749e2f887a0ad0f2 100644 (file)
@@ -63,7 +63,7 @@ struct radeon_bo_funcs {
                                  uint32_t domains,
                                  uint32_t flags);
     void (*bo_ref)(struct radeon_bo *bo);
-    void (*bo_unref)(struct radeon_bo *bo);
+    struct radeon_bo *(*bo_unref)(struct radeon_bo *bo);
     int (*bo_map)(struct radeon_bo *bo, int write);
     int (*bo_unmap)(struct radeon_bo *bo);
 };
@@ -118,10 +118,10 @@ static inline void _radeon_bo_ref(struct radeon_bo *bo,
     bo->bom->funcs->bo_ref(bo);
 }
 
-static inline void _radeon_bo_unref(struct radeon_bo *bo,
-                                    const char *file,
-                                    const char *func,
-                                    int line)
+static inline struct radeon_bo *_radeon_bo_unref(struct radeon_bo *bo,
+                                                 const char *file,
+                                                 const char *func,
+                                                 int line)
 {
     bo->cref--;
 #ifdef RADEON_BO_TRACK
@@ -131,7 +131,7 @@ static inline void _radeon_bo_unref(struct radeon_bo *bo,
         bo->track = NULL;
     }
 #endif
-    bo->bom->funcs->bo_unref(bo);
+    return bo->bom->funcs->bo_unref(bo);
 }
 
 static inline int _radeon_bo_map(struct radeon_bo *bo,
index 8ce829199aba1d066a55fdfaedf59d2b4e772e30..b6d5b2948fbc326ade0fe3fb7235efe4423b57f3 100644 (file)
@@ -115,16 +115,16 @@ static void bo_ref(struct radeon_bo *bo)
 {
 }
 
-static void bo_unref(struct radeon_bo *bo)
+static struct radeon_bo *bo_unref(struct radeon_bo *bo)
 {
     struct radeon_bo_gem *bo_gem = (struct radeon_bo_gem*)bo;
     struct drm_gem_close args;
 
     if (bo == NULL) {
-        return;
+        return NULL;
     }
     if (bo->cref) {
-        return;
+        return bo;
     }
     if (bo_gem->map_count) {
         munmap(bo->ptr, bo->size);
@@ -134,6 +134,7 @@ static void bo_unref(struct radeon_bo *bo)
     args.handle = bo->handle;
     ioctl(bo->bom->fd, DRM_IOCTL_GEM_CLOSE, &args);
     free(bo_gem);
+    return NULL;
 }
 
 static int bo_map(struct radeon_bo *bo, int write)
@@ -182,7 +183,7 @@ static struct radeon_bo_funcs bo_gem_funcs = {
     bo_unmap
 };
 
-struct radeon_bo_manager *radeon_bo_manager_gem(int fd)
+struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd)
 {
     struct bo_manager_gem *bomg;
 
@@ -195,7 +196,7 @@ struct radeon_bo_manager *radeon_bo_manager_gem(int fd)
     return (struct radeon_bo_manager*)bomg;
 }
 
-void radeon_bo_manager_gem_shutdown(struct radeon_bo_manager *bom)
+void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom)
 {
     struct bo_manager_gem *bomg = (struct bo_manager_gem*)bom;
 
index aaefd8c3422e4810c6b06f025b5b091ad5ca1257..c0f68e6d7a369aba49697617ead7ec98a35a873f 100644 (file)
@@ -34,7 +34,7 @@
 
 #include "radeon_bo.h"
 
-struct radeon_bo_manager *radeon_bo_manager_gem(int fd);
-void radeon_bo_manager_gem_shutdown(struct radeon_bo_manager *bom);
+struct radeon_bo_manager *radeon_bo_manager_gem_ctor(int fd);
+void radeon_bo_manager_gem_dtor(struct radeon_bo_manager *bom);
 
 #endif
index 9488f81c61254ad8bd56a10e5272a9849204fd90..91489dff45799dd7bbcfcb708c2c9ec40138aa70 100644 (file)
@@ -251,7 +251,8 @@ static int cs_gem_emit(struct radeon_cs *cs)
 {
     struct cs_gem *csg = (struct cs_gem*)cs;
     uint64_t chunk_array[2];
-    int r, i;
+    unsigned i;
+    int r;
 
     chunk_array[0] = (uint64_t)(intptr_t)&csg->chunks[0];
     chunk_array[1] = (uint64_t)(intptr_t)&csg->chunks[1];
@@ -282,7 +283,7 @@ static int cs_gem_destroy(struct radeon_cs *cs)
 static int cs_gem_erase(struct radeon_cs *cs)
 {
     struct cs_gem *csg = (struct cs_gem*)cs;
-    int i;
+    unsigned i;
 
     if (csg->relocs_bo) {
         for (i = 0; i < csg->base.crelocs; i++) {
@@ -318,7 +319,7 @@ static struct radeon_cs_funcs radeon_cs_gem_funcs = {
     cs_gem_need_flush
 };
 
-struct radeon_cs_manager *radeon_cs_manager_gem(int fd)
+struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd)
 {
     struct radeon_cs_manager *csm;
 
@@ -332,7 +333,7 @@ struct radeon_cs_manager *radeon_cs_manager_gem(int fd)
     return csm;
 }
 
-void radeon_cs_manager_gem_shutdown(struct radeon_cs_manager *csm)
+void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm)
 {
     free(csm);
 }
index f50c5e844709d2ca586e2d6643ce5fb04f774a61..5efd146f6b3d7990320223fa44b52a6a3090404e 100644 (file)
@@ -35,7 +35,7 @@
 
 #include "radeon_cs.h"
 
-struct radeon_cs_manager *radeon_cs_manager_gem(int fd);
-void radeon_cs_manager_gem_shutdown(struct radeon_cs_manager *csm);
+struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd);
+void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm);
 
 #endif