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.
|
* 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 height,
|
||||||
int32_t format,
|
int32_t hal_format,
|
||||||
int32_t usage)
|
int32_t usage)
|
||||||
{
|
{
|
||||||
struct alloc_handle_t handle = {
|
struct gralloc_handle_t *handle;
|
||||||
.magic = GRALLOC_HANDLE_MAGIC,
|
|
||||||
.version = GRALLOC_HANDLE_VERSION };
|
|
||||||
|
|
||||||
native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS,
|
native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS,
|
||||||
GRALLOC_HANDLE_NUM_INTS);
|
GRALLOC_HANDLE_NUM_INTS);
|
||||||
handle.base = *nhandle;
|
|
||||||
native_handle_delete(nhandle);
|
|
||||||
|
|
||||||
handle.width = width;
|
if (!nhandle)
|
||||||
handle.height = height;
|
return NULL;
|
||||||
handle.format = format;
|
|
||||||
handle.usage = usage;
|
|
||||||
handle.prime_fd = -1;
|
|
||||||
|
|
||||||
handle->data_owner = getpid();
|
handle = gralloc_handle(nhandle);
|
||||||
handle->data = bo;
|
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;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue