From 476d7e52448ec3248efecdac34adb8510ad918b9 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Thu, 24 Jun 2021 13:21:43 +0900 Subject: [PATCH] tbm_bufmgr: lock the gLock before locking tbm_bufmgr_mutex The order of locking mutex makes deadlock. So this patch will start to fix. Change-Id: I47a537f41ad19cac3bb1a31fc75a88bae5cda21d --- src/tbm_bufmgr.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/tbm_bufmgr.c b/src/tbm_bufmgr.c index 9ad49b4..f7ca118 100644 --- a/src/tbm_bufmgr.c +++ b/src/tbm_bufmgr.c @@ -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; } -- 2.34.1