tbm: check need_dpy_deinit 32/67432/1
authorSangjin Lee <lsj119@samsung.com>
Tue, 26 Apr 2016 11:54:50 +0000 (20:54 +0900)
committerSangjin Lee <lsj119@samsung.com>
Tue, 26 Apr 2016 11:54:50 +0000 (20:54 +0900)
Change-Id: Ib13fe70e133e2f63f4a520acda4f068dc34d33d4

src/tpl_tbm.c

index 552dead..9ed4b1c 100644 (file)
@@ -13,6 +13,7 @@ typedef struct _tpl_tbm_display tpl_tbm_display_t;
 typedef struct _tpl_tbm_surface tpl_tbm_surface_t;
 
 struct _tpl_tbm_display {
+       int need_dpy_deinit;
        int dummy;
 };
 
@@ -27,12 +28,13 @@ __tpl_tbm_display_init(tpl_display_t *display)
 
        TPL_ASSERT(display);
 
+       tbm_display = (tpl_tbm_display_t *) calloc(1, sizeof(tpl_tbm_display_t));
+
        if (!display->native_handle) {
                display->native_handle = tbm_bufmgr_init(-1);
+               tbm_display->need_dpy_deinit = 1;
        }
 
-       tbm_display = (tpl_tbm_display_t *) calloc(1, sizeof(tpl_tbm_display_t));
-
        if (!tbm_display) {
                TPL_ERR("Failed to allocate memory for new tpl_tbm_display_t.");
                return TPL_ERROR_INVALID_OPERATION;
@@ -53,11 +55,13 @@ __tpl_tbm_display_fini(tpl_display_t *display)
 
        tbm_display = (tpl_tbm_display_t *)display->backend.data;
 
-       if (tbm_display) free(tbm_display);
-
        display->backend.data = NULL;
 
-       tbm_bufmgr_deinit((tbm_bufmgr)display->native_handle);
+       if (tbm_display->need_dpy_deinit)
+               tbm_bufmgr_deinit((tbm_bufmgr)display->native_handle);
+
+       if (tbm_display)
+               free(tbm_display);
 }
 
 static tpl_result_t