Skip to content

用文件作为存储后端,有锁首次初始化时,_fdb_kv_load 中调用 fdb_kv_set_default 死锁 #276

@Zmmfly

Description

@Zmmfly

设了锁后,fdb_kvdb_init里调了一次db_lock:

FlashDB/src/fdb_kvdb.c

Lines 1757 to 1758 in c1226f3

/* lock the KVDB */
db_lock(db);

再在 _fdb_kv_load里检查到失败计数check_failed_countSECTOR_NUM相等时,调用fdb_kv_set_default

FlashDB/src/fdb_kvdb.c

Lines 1643 to 1646 in c1226f3

if (check_failed_count == SECTOR_NUM) {
FDB_INFO("All sector header is incorrect. Set it to default.\n");
fdb_kv_set_default(db);
}

fdb_kv_set_default里又调一次db_lock:

FlashDB/src/fdb_kvdb.c

Lines 1392 to 1399 in c1226f3

fdb_err_t fdb_kv_set_default(fdb_kvdb_t db)
{
fdb_err_t result = FDB_NO_ERR;
uint32_t addr, i, value_len;
struct kvdb_sec_info sector;
/* lock the KV cache */
db_lock(db);

用递归锁可以规避,但是文档中没有见到相关描述

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions