summaryrefslogtreecommitdiffstats
path: root/gralloc.c
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2011-07-29 19:57:04 +0900
committerChia-I Wu <olvaffe@gmail.com>2011-07-29 20:45:50 +0900
commit2fc5da4da12c8fa36044acc58856b0e460e70621 (patch)
tree8d7d079e8bbc5ec234100ba4189078a9858e0141 /gralloc.c
parent3b55dd80b8d0ee5eb79342a70b57b4b75cd84d5f (diff)
downloadexternal_drm_gralloc-2fc5da4da12c8fa36044acc58856b0e460e70621.zip
external_drm_gralloc-2fc5da4da12c8fa36044acc58856b0e460e70621.tar.gz
external_drm_gralloc-2fc5da4da12c8fa36044acc58856b0e460e70621.tar.bz2
close bo on unregister()
Not sure if a remote process ever destroys a bo. But let register() opens a bo and unregister() closes it.
Diffstat (limited to 'gralloc.c')
-rw-r--r--gralloc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/gralloc.c b/gralloc.c
index 850a39e..fd4f848 100644
--- a/gralloc.c
+++ b/gralloc.c
@@ -114,13 +114,24 @@ static int drm_mod_perform(const struct gralloc_module_t *mod, int op, ...)
static int drm_mod_register_buffer(const gralloc_module_t *mod,
buffer_handle_t handle)
{
- return (gralloc_drm_handle(handle)) ? 0 : -EINVAL;
+ struct drm_module_t *dmod = (struct drm_module_t *) mod;
+
+ return (gralloc_drm_bo_register(dmod->drm, handle, 1)) ? 0 : -EINVAL;
}
static int drm_mod_unregister_buffer(const gralloc_module_t *mod,
buffer_handle_t handle)
{
- return (gralloc_drm_handle(handle)) ? 0 : -EINVAL;
+ struct drm_module_t *dmod = (struct drm_module_t *) mod;
+ struct gralloc_drm_bo_t *bo;
+
+ bo = gralloc_drm_bo_validate(dmod->drm, handle);
+ if (!bo)
+ return -EINVAL;
+
+ gralloc_drm_bo_unregister(bo);
+
+ return 0;
}
static int drm_mod_lock(const gralloc_module_t *mod, buffer_handle_t handle,