aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Herring2018-02-14 17:03:56 -0600
committerRob Herring2018-02-20 14:16:16 -0600
commit009634e493097afae95d190fc26cb04a1664648a (patch)
tree8e5468b77042927212373bcd45abcb458fc5e90a
parent86c62e49c81eb56200ec72936462a9a8629d7d1d (diff)
downloadexternal-libdrm-009634e493097afae95d190fc26cb04a1664648a.tar.gz
external-libdrm-009634e493097afae95d190fc26cb04a1664648a.tar.xz
external-libdrm-009634e493097afae95d190fc26cb04a1664648a.zip
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>
-rw-r--r--android/gralloc_handle.h34
1 files changed, 16 insertions, 18 deletions
diff --git a/android/gralloc_handle.h b/android/gralloc_handle.h
index 43255ba5..9cb5a5d7 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)
84/** 84/**
85 * Create a buffer handle. 85 * Create a buffer handle.
86 */ 86 */
87static struct gralloc_handle_t gralloc_handle_create(int32_t width, 87static inline native_handle_t *gralloc_handle_create(int32_t width,
88 int32_t height, 88 int32_t height,
89 int32_t format, 89 int32_t hal_format,
90 int32_t usage) 90 int32_t usage)
91{ 91{
92 struct alloc_handle_t handle = { 92 struct gralloc_handle_t *handle;
93 .magic = GRALLOC_HANDLE_MAGIC,
94 .version = GRALLOC_HANDLE_VERSION };
95
96 native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS, 93 native_handle_t *nhandle = native_handle_create(GRALLOC_HANDLE_NUM_FDS,
97 GRALLOC_HANDLE_NUM_INTS); 94 GRALLOC_HANDLE_NUM_INTS);
98 handle.base = *nhandle; 95
99 native_handle_delete(nhandle); 96 if (!nhandle)
100 97 return NULL;
101 handle.width = width; 98
102 handle.height = height; 99 handle = gralloc_handle(nhandle);
103 handle.format = format; 100 handle->magic = GRALLOC_HANDLE_MAGIC;
104 handle.usage = usage; 101 handle->version = GRALLOC_HANDLE_VERSION;
105 handle.prime_fd = -1; 102 handle->width = width;
106 103 handle->height = height;
107 handle->data_owner = getpid(); 104 handle->format = hal_format;
108 handle->data = bo; 105 handle->usage = usage;
106 handle->prime_fd = -1;
109 107
110 return handle; 108 return handle;
111} 109}