From a9406c90072fa27c3c170416fd8b88684fa4d622 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 8 May 2013 19:19:34 +0900 Subject: [PATCH] control the unlock accoding to the lock_type Change-Id: I80d616e705c22ba388f0555ad8739c87c227881b --- src/tbm_bufmgr.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/tbm_bufmgr.c b/src/tbm_bufmgr.c index 338fb05..6636cc2 100755 --- a/src/tbm_bufmgr.c +++ b/src/tbm_bufmgr.c @@ -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); -- 2.7.4