diff options
-rw-r--r-- | src/tbm_bufmgr_dumb.c | 70 |
1 files changed, 29 insertions, 41 deletions
diff --git a/src/tbm_bufmgr_dumb.c b/src/tbm_bufmgr_dumb.c index a0974cd..9f4b0b9 100644 --- a/src/tbm_bufmgr_dumb.c +++ b/src/tbm_bufmgr_dumb.c @@ -1479,18 +1479,18 @@ int tbm_dumb_bufmgr_bind_native_display (tbm_bufmgr bufmgr, void *native_display) { tbm_bufmgr_dumb bufmgr_dumb; - + bufmgr_dumb = tbm_backend_get_priv_from_bufmgr(bufmgr); DUMB_RETURN_VAL_IF_FAIL(bufmgr_dumb != NULL, 0); - + if (!tbm_drm_helper_wl_auth_server_init(native_display, bufmgr_dumb->fd, bufmgr_dumb->device_name, 0)) { TBM_DUMB_LOG("error:Fail to tbm_drm_helper_wl_server_init\n"); return 0; } - + bufmgr_dumb->bind_display = native_display; - + return 1; } @@ -1529,43 +1529,30 @@ init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) return 0; } - if (tbm_backend_is_display_server()) { + if (tbm_backend_is_display_server()) { bufmgr_dumb->fd = tbm_drm_helper_get_master_fd(); if (bufmgr_dumb->fd < 0) { bufmgr_dumb->fd = _tbm_dumb_open_drm(); } - + if (bufmgr_dumb->fd < 0) { TBM_DUMB_LOG ("error:Fail to create drm!\n"); - free (bufmgr_dumb); - return 0; + goto fail_open_drm; } tbm_drm_helper_set_tbm_master_fd(bufmgr_dumb->fd); - + bufmgr_dumb->device_name = drmGetDeviceNameFromFd(bufmgr_dumb->fd); - if (!bufmgr_dumb->device_name) { TBM_DUMB_LOG ("error:Fail to get device name!\n"); - - tbm_drm_helper_unset_tbm_master_fd(); - - close(bufmgr_dumb->fd); - - free (bufmgr_dumb); - return 0; + goto fail_get_device_name; } } else { if (!tbm_drm_helper_get_auth_info(&(bufmgr_dumb->fd), &(bufmgr_dumb->device_name), NULL)) { TBM_DUMB_LOG ("error:Fail to get auth drm info!\n"); - - if (bufmgr_dumb->fd >= 0) - close(bufmgr_dumb->fd); - - free (bufmgr_dumb); - return 0; + goto fail_get_auth_info; } } @@ -1590,16 +1577,7 @@ init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) if (!bufmgr_backend) { TBM_DUMB_LOG ("error: Fail to create drm!\n"); - if (bufmgr_dumb->hashBos) - drmHashDestroy (bufmgr_dumb->hashBos); - - if (tbm_backend_is_display_server()) - tbm_drm_helper_unset_tbm_master_fd(); - - close(bufmgr_dumb->fd); - - free (bufmgr_dumb); - return 0; + goto fail_alloc_backend; } bufmgr_backend->priv = (void *)bufmgr_dumb; @@ -1624,14 +1602,7 @@ init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) if (!tbm_backend_init (bufmgr, bufmgr_backend)) { TBM_DUMB_LOG ("error: Fail to init backend!\n"); - - if (tbm_backend_is_display_server()) - tbm_drm_helper_unset_tbm_master_fd(); - - close(bufmgr_dumb->fd); - - tbm_backend_free (bufmgr_backend); - free (bufmgr_dumb); + goto fail_init_backend; return 0; } @@ -1658,6 +1629,23 @@ init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) bufmgr_dumb->fd); return 1; + +fail_init_backend: + tbm_backend_free(bufmgr_backend); +fail_alloc_backend: + if (bufmgr_dumb->hashBos) + drmHashDestroy(bufmgr_dumb->hashBos); + if (bufmgr_dumb->device_name) + free(bufmgr_dumb->device_name); +fail_get_device_name: + if (tbm_backend_is_display_server()) + tbm_drm_helper_unset_tbm_master_fd(); + if (bufmgr_dumb->fd >= 0) + close(bufmgr_dumb->fd); +fail_get_auth_info: +fail_open_drm: + free(bufmgr_dumb); + return 0; } |