[CBRD-26478] Refactor lock manager initialization#6930
[CBRD-26478] Refactor lock manager initialization#6930hgryoo wants to merge 6 commits intoCUBRID:developfrom
Conversation
…k-manager API is exposed by this refactor
🧪 TC Test Environment ReadyCircleCI Testing:
TC Repositories & Branches:
Next Steps:
|
…to use a common term consistent with system_parameter.c
|
/run all |
|
Reviews (1): Last reviewed commit: "indent, fix build" | Re-trigger Greptile |
|
Reviews (2): Last reviewed commit: "apply review by greptile" | Re-trigger Greptile |
|
Reviews (3): Last reviewed commit: "fix finalizing order" | Re-trigger Greptile |
| { | ||
| free_and_init (lk_Gl.TWFG_node); | ||
| } | ||
| pthread_mutex_destroy (&lk_Gl.DL_detection_mutex); |
There was a problem hiding this comment.
pthread_mutex_destroy — lock_initialize_deadlock_detection 미호출 경로에서 무조건 실행
lock_finalize_deadlock_detection은 항상 pthread_mutex_destroy(&lk_Gl.DL_detection_mutex)를 호출합니다. 그런데 DL_detection_mutex의 pthread_mutex_init 호출은 lock_initialize_deadlock_detection 내부(line 1292)에서만 이뤄집니다.
문제 시나리오: lock_initialize_with_config에서 lock_initialize_tran_lock_table 또는 lock_initialize_object_lock_structures가 실패하면 → goto error → lock_finalize() → lock_finalize_deadlock_detection() 순서로 호출됩니다. 이 경우 lock_initialize_deadlock_detection은 한 번도 호출되지 않았으므로 DL_detection_mutex는 구조체 생성자의 PTHREAD_MUTEX_INITIALIZER로만 초기화된 상태입니다.
Linux/glibc에서는 PTHREAD_MUTEX_INITIALIZER 상태의 뮤텍스에 대해 pthread_mutex_destroy를 호출해도 안전하지만, POSIX 표준 상으로는 "명시적으로 초기화된(via pthread_mutex_init) 뮤텍스"에만 destroy를 보장합니다. 이식성 측면에서 간단한 guard 조건을 추가하는 것을 권장합니다.
/* lock_finalize_deadlock_detection 내부, 현재 마지막 라인 직전에 조건 추가 */
if (lk_Gl.TWFG_node != NULL || lk_Gl.TWFG_edge_storage != NULL)
{
/* DL_detection_mutex was pthread_mutex_init'd only if lock_initialize_deadlock_detection ran */
pthread_mutex_destroy (&lk_Gl.DL_detection_mutex);
}또는 LK_GLOBAL_DATA에 bool deadlock_detection_initialized 같은 플래그를 두고 lock_initialize_deadlock_detection 진입 시 설정하는 방식으로 명확히 할 수 있습니다.
http://jira.cubrid.org/browse/CBRD-26478
Purpose
This change refactors
lock_managerinitialization/finalization to centralize runtime configuration and make lock-manager-owned resources explicit.Implementation
TWFG_edge_storagevictimsRemarks
N/A