close bo on unregister()

Not sure if a remote process ever destroys a bo.  But let register()
opens a bo and unregister() closes it.
diff --git a/gralloc_drm.c b/gralloc_drm.c
index af33986..e220ebe 100644
--- a/gralloc_drm.c
+++ b/gralloc_drm.c
@@ -234,10 +234,28 @@
 }
 
 /*
- * Validate a buffer handle and return the associated bo.
+ * Destroy a bo.
  */
-struct gralloc_drm_bo_t *gralloc_drm_bo_validate(struct gralloc_drm_t *drm,
-		buffer_handle_t _handle)
+void gralloc_drm_bo_destroy(struct gralloc_drm_bo_t *bo)
+{
+	struct gralloc_drm_handle_t *handle = bo->handle;
+	int imported = bo->imported;
+
+	bo->drm->drv->free(bo->drm->drv, bo);
+	if (imported) {
+		handle->data_owner = 0;
+		handle->data = 0;
+	}
+	else {
+		free(handle);
+	}
+}
+
+/*
+ * Register a buffer handle and return the associated bo.
+ */
+struct gralloc_drm_bo_t *gralloc_drm_bo_register(struct gralloc_drm_t *drm,
+		buffer_handle_t _handle, int create)
 {
 	struct gralloc_drm_handle_t *handle = gralloc_drm_handle(_handle);
 
@@ -245,6 +263,9 @@
 	if (handle && unlikely(handle->data_owner != gralloc_drm_pid)) {
 		struct gralloc_drm_bo_t *bo;
 
+		if (!create)
+			return NULL;
+
 		/* create the struct gralloc_drm_bo_t locally */
 		if (handle->name)
 			bo = drm->drv->alloc(drm->drv, handle);
@@ -264,21 +285,12 @@
 }
 
 /*
- * Destroy a bo.
+ * Unregister a bo.  It is no-op for bo created locally.
  */
-void gralloc_drm_bo_destroy(struct gralloc_drm_bo_t *bo)
+void gralloc_drm_bo_unregister(struct gralloc_drm_bo_t *bo)
 {
-	struct gralloc_drm_handle_t *handle = bo->handle;
-	int imported = bo->imported;
-
-	bo->drm->drv->free(bo->drm->drv, bo);
-	if (imported) {
-		handle->data_owner = 0;
-		handle->data = 0;
-	}
-	else {
-		free(handle);
-	}
+	if (bo->imported)
+		gralloc_drm_bo_destroy(bo);
 }
 
 /*