tbm_bufmgr: lock the gLock before locking tbm_bufmgr_mutex 70/260370/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 24 Jun 2021 04:21:43 +0000 (13:21 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Thu, 24 Jun 2021 04:21:43 +0000 (13:21 +0900)
The order of locking mutex makes deadlock. So this patch
will start to fix.

Change-Id: I47a537f41ad19cac3bb1a31fc75a88bae5cda21d

src/tbm_bufmgr.c

index 9ad49b4..f7ca118 100644 (file)
@@ -832,21 +832,28 @@ tbm_bufmgr_server_init(void)
 int
 tbm_bufmgr_set_bo_lock_type(tbm_bufmgr bufmgr, tbm_bufmgr_bo_lock_type bo_lock_type)
 {
+       pthread_mutex_lock(&gLock);
        _tbm_bufmgr_mutex_lock();
+
        _tbm_set_last_result(TBM_ERROR_NONE);
 
-       TBM_BUFMGR_RETURN_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(gBufMgr), 0);
-       TBM_BUFMGR_RETURN_VAL_IF_FAIL(bufmgr == gBufMgr, 0);
+       TBM_GOTO_VAL_IF_FAIL(TBM_BUFMGR_IS_VALID(gBufMgr), failed);
+       TBM_GOTO_VAL_IF_FAIL(bufmgr == gBufMgr, failed);
 
-       pthread_mutex_lock(&gLock);
        gBufMgr->bo_lock_type = bo_lock_type;
-       pthread_mutex_unlock(&gLock);
 
        TBM_INFO("The bo_lock_type of the bo is %d\n", bo_lock_type);
 
        _tbm_bufmgr_mutex_unlock();
+       pthread_mutex_unlock(&gLock);
 
        return 1;
+
+failed:
+       _tbm_bufmgr_mutex_unlock();
+       pthread_mutex_unlock(&gLock);
+
+       return 0;
 }