android: fix gralloc_handle_create() problems
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(). In the interest of making gralloc_handle_t opaque, return a native_handle_t ptr instead. Reviewed-by: Robert Foss <robert.foss@collabora.com> Signed-off-by: Rob Herring <robh@kernel.org>main
parent
86c62e49c8
commit
009634e493
|
@ -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 native_handle_t *gralloc_handle_create(int32_t width,
|
||||
int32_t height,
|
||||
int32_t format,
|
||||
int32_t hal_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);
|
||||
GRALLOC_HANDLE_NUM_INTS);
|
||||
|
||||
handle.width = width;
|
||||
handle.height = height;
|
||||
handle.format = format;
|
||||
handle.usage = usage;
|
||||
handle.prime_fd = -1;
|
||||
if (!nhandle)
|
||||
return NULL;
|
||||
|
||||
handle->data_owner = getpid();
|
||||
handle->data = bo;
|
||||
handle = gralloc_handle(nhandle);
|
||||
handle->magic = GRALLOC_HANDLE_MAGIC;
|
||||
handle->version = GRALLOC_HANDLE_VERSION;
|
||||
handle->width = width;
|
||||
handle->height = height;
|
||||
handle->format = hal_format;
|
||||
handle->usage = usage;
|
||||
handle->prime_fd = -1;
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue