There's a number of problems with gralloc_handle_create starting with it
doesn't even compile. More importantly, it doesn't really create (i.e.
allocate) a handle. It allocates a native_handle_t, copies it to a
struct gralloc_handle_t on the stack and returns the struct (not a ptr).
So the caller still has to allocate a struct gralloc_handle_t to hold
the returned struct.

Rework gralloc_handle_create() to allocate a new handle and return the
pointer to the allocated handle. Callers should free the handle with
native_handle_close() and native_handle_delete().

Signed-off-by: Rob Herring <r...@kernel.org>
---
 android/gralloc_handle.h | 32 +++++++++++++++-----------------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/android/gralloc_handle.h b/android/gralloc_handle.h
index 43255ba539c2..3177f7a1fd8f 100644
--- a/android/gralloc_handle.h
+++ b/android/gralloc_handle.h
@@ -84,28 +84,26 @@ static inline struct gralloc_handle_t 
*gralloc_handle(buffer_handle_t handle)
 /**
  * Create a buffer handle.
  */
-static struct gralloc_handle_t gralloc_handle_create(int32_t width,
+static inline struct gralloc_handle_t *gralloc_handle_create(int32_t width,
                                                      int32_t height,
                                                      int32_t format,
                                                      int32_t usage)
 {
-       struct alloc_handle_t handle = {
-               .magic = GRALLOC_HANDLE_MAGIC,
-               .version = GRALLOC_HANDLE_VERSION };
-
+       struct gralloc_handle_t *handle;
        native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS,
-                                                           
GRALLOC_HANDLE_NUM_INTS);
-       handle.base = *nhandle;
-       native_handle_delete(nhandle);
-
-       handle.width = width;
-       handle.height = height;
-       handle.format = format;
-       handle.usage = usage;
-       handle.prime_fd = -1;
-
-       handle->data_owner = getpid();
-       handle->data = bo;
+                                                       
GRALLOC_HANDLE_NUM_INTS);
+
+       if (!nhandle)
+               return NULL;
+
+       handle = gralloc_handle(nhandle);
+       handle->magic = GRALLOC_HANDLE_MAGIC;
+       handle->version = GRALLOC_HANDLE_VERSION;
+       handle->width = width;
+       handle->height = height;
+       handle->format = format;
+       handle->usage = usage;
+       handle->prime_fd = -1;
 
        return handle;
 }
-- 
2.14.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to