tpl_gbm, tpl_tbm: Revised exception checking syntax of the dequeue error situation. 04/123004/3
authorjoonbum.ko <joonbum.ko@samsung.com>
Tue, 14 Mar 2017 08:15:29 +0000 (17:15 +0900)
committerjoonbum.ko <joonbum.ko@samsung.com>
Fri, 14 Apr 2017 07:10:51 +0000 (16:10 +0900)
 - This patch will be able to resolve SVACE issue about below error situation.
  1. tbm_surface_queue_dequeue return (tbm_surface == NULL)
  2. tbm_surface_queue_can_dequeue return 0, because of internal error.
  3. cannot enter the if syntax and cannot call tbm_surface_queue_dequeue.
  4. tbm_surface is still NULL but try to call tbm_surface_internal_ref. <- error case.

Change-Id: I4dbdb51bf3682a1acadde4d7c07d899de6fe01cd
Signed-off-by: joonbum.ko <joonbum.ko@samsung.com>
src/tpl_gbm.c
src/tpl_tbm.c

index f45ba99..06596a2 100644 (file)
@@ -442,7 +442,7 @@ __tpl_gbm_surface_dequeue_buffer(tpl_surface_t *surface, uint64_t timeout_ns,
 {
        tbm_bo bo;
        tbm_surface_h tbm_surface = NULL;
-       tbm_surface_queue_error_e tsq_err = 0;
+       tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
        tpl_gbm_buffer_t *gbm_buffer = NULL;
 
        tpl_gbm_surface_t *gbm_surface = NULL;
@@ -458,18 +458,17 @@ __tpl_gbm_surface_dequeue_buffer(tpl_surface_t *surface, uint64_t timeout_ns,
        gbm_surface = (tpl_gbm_surface_t *)surface->backend.data;
 
        TRACE_BEGIN("WAITING FOR DEQUEUEABLE");
-       tsq_err = tbm_surface_queue_dequeue(gbm_surface->tbm_queue, &tbm_surface);
-       if (!tbm_surface
-                       && tbm_surface_queue_can_dequeue(gbm_surface->tbm_queue, 1) == 1) {
+       if (tbm_surface_queue_can_dequeue(gbm_surface->tbm_queue, 1) == 1)
                tsq_err = tbm_surface_queue_dequeue(gbm_surface->tbm_queue, &tbm_surface);
-               if (!tbm_surface) {
-                       TPL_ERR("Failed to get tbm_surface from tbm_surface_queue | tsq_err = %d",
-                                       tsq_err);
-                       TRACE_END();
-                       return NULL;
-               }
+
+       if (!tbm_surface) {
+               TPL_ERR("Failed to get tbm_surface from tbm_surface_queue | tsq_err = %d",
+                               tsq_err);
+               TRACE_END();
+               return NULL;
        }
        TRACE_END();
+
        /* Inc ref count about tbm_surface */
        /* It will be dec when before tbm_surface_queue_enqueue called */
        tbm_surface_internal_ref(tbm_surface);
index b5c022e..50154e5 100644 (file)
@@ -594,7 +594,7 @@ __tpl_tbm_surface_dequeue_buffer(tpl_surface_t *surface, uint64_t timeout_ns,
 {
        tbm_surface_h tbm_surface = NULL;
        tbm_surface_queue_h tbm_queue = NULL;
-       tbm_surface_queue_error_e tsq_err = 0;
+       tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
        tpl_tbm_buffer_t *tpl_tbm_buffer = NULL;
 
        TPL_ASSERT(surface);
@@ -607,14 +607,13 @@ __tpl_tbm_surface_dequeue_buffer(tpl_surface_t *surface, uint64_t timeout_ns,
 
        tbm_queue = (tbm_surface_queue_h)surface->native_handle;
 
-       tsq_err = tbm_surface_queue_dequeue(tbm_queue, &tbm_surface);
-       if (!tbm_surface  && tbm_surface_queue_can_dequeue(tbm_queue, 1) == 1) {
+       if (tbm_surface_queue_can_dequeue(tbm_queue, 1) == 1)
                tsq_err = tbm_surface_queue_dequeue(tbm_queue, &tbm_surface);
-               if (!tbm_surface) {
-                       TPL_ERR("Failed to get tbm_surface from tbm_surface_queue | tsq_err = %d",
-                                       tsq_err);
-                       return NULL;
-               }
+
+       if (!tbm_surface) {
+               TPL_ERR("Failed to get tbm_surface from tbm_surface_queue | tsq_err = %d",
+                               tsq_err);
+               return NULL;
        }
 
        if (surface->backend.type == TPL_BACKEND_TBM_VULKAN_WSI) {