control the unlock accoding to the lock_type
authorSooChan Lim <sc1.lim@samsung.com>
Wed, 8 May 2013 10:19:34 +0000 (19:19 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 17 Jun 2013 01:34:35 +0000 (10:34 +0900)
Change-Id: I80d616e705c22ba388f0555ad8739c87c227881b

src/tbm_bufmgr.c

index 338fb05..6636cc2 100755 (executable)
@@ -121,9 +121,9 @@ static int bDebug = 0;
 
 #define MODULE_VERSION_NUMERIC(maj, min, patch) \
                ((((maj) & 0xFF) << 24) | (((min) & 0xFF) << 16) | (patch & 0xFFFF))
-#define GET_MODULE_MAJOR_VERSION(vers) (((vers) >> 24) & 0xFF)
-#define GET_MODULE_MINOR_VERSION(vers) (((vers) >> 16) & 0xFF)
-#define GET_MODULE_PATCHLEVEL(vers)    ((vers) & 0xFFFF)
+#define GET_MODULE_MAJOR_VERSION(vers)    (((vers) >> 24) & 0xFF)
+#define GET_MODULE_MINOR_VERSION(vers)    (((vers) >> 16) & 0xFF)
+#define GET_MODULE_PATCHLEVEL(vers)    ((vers) & 0xFFFF)
 
 enum {
     LOCK_TRY_ONCE,
@@ -416,16 +416,30 @@ _tbm_bo_unlock (tbm_bo bo)
     RETURN_CHECK_FLAG (CTRL_BACKEND_VALID(bufmgr->backend->flags));
 
     old = bo->lock_cnt;
-    if (bo->lock_cnt > 0)
+    switch (bufmgr->lock_type)
     {
-        bo->lock_cnt--;
-        if (bo->lock_cnt == 0)
-           _bo_unlock (bo);
+        case LOCK_TRY_ALWAYS:    /* LOCK_TRY_ALWAYS */
+            if (bo->lock_cnt > 0)
+            {
+                bo->lock_cnt--;
+                _bo_unlock (bo);
+            }
+            break;
+        case LOCK_TRY_NEVER:    /* LOCK_TRY_NEVER */
+            return;
+            break;
+        default:
+            if (bo->lock_cnt > 0)
+            {
+                bo->lock_cnt--;
+                if (bo->lock_cnt == 0)
+                   _bo_unlock (bo);
+            }
+            break;
     }
-    else if (bo->lock_cnt < 0)
-    {
+
+    if (bo->lock_cnt < 0)
         bo->lock_cnt = 0;
-    }
 
     DBG_LOCK ("[libtbm:%d] << unlock bo:%p(%d, %d->%d)\n", getpid(),
              bo, bo->tgl_key, old, bo->lock_cnt);