125 Star 882 Fork 312

GVP朱天龙 (Armink) / FlashDB

 / 详情

tsdb 初始化 db->oldest_addr 溢出错误

已完成
创建于  
2021-09-21 14:22

fdb_tsdb.c 859 行,db->cur_sec.addr 在 TSDB 满时, 初始化为 FDB_DATA_UNUSED, 导致 oldest_addr 溢出错误。

        uint32_t latest_addr;
        if (check_sec_arg.empty_num > 0) {
            latest_addr = check_sec_arg.empty_addr;
        } else {
            latest_addr = db->cur_sec.addr;
        }
        /* db->cur_sec is the latest sector, and the next is the oldest sector */
        if (latest_addr + db_sec_size(db) >= db_max_size(db)) {
            /* db->cur_sec is the the bottom of the partition */
            db->oldest_addr = 0;
        } else {
            db->oldest_addr = latest_addr + db_sec_size(db);
        }

修改测试

        uint32_t latest_addr;
        if (check_sec_arg.empty_num > 0) {
            latest_addr = check_sec_arg.empty_addr;
        } else {
            latest_addr = db->cur_sec.addr;
        }
        /* db->cur_sec is the latest sector, and the next is the oldest sector */
        if (latest_addr == FDB_DATA_UNUSED || latest_addr + db_sec_size(db) >= db_max_size(db)) {
            /* db->cur_sec is the the bottom of the partition */
            db->oldest_addr = 0;
        } else {
            db->oldest_addr = latest_addr + db_sec_size(db);
        }

评论 (2)

xwiron 创建了任务
xwiron 关联仓库设置为armink/FlashDB
xwiron 修改了描述
展开全部操作日志

感谢你反馈,将 774 行改为下面的方式可能更直观

/* There is no empty sector. */
latest_addr = db->cur_sec.addr = db_max_size(db) - db_sec_size(db);

另外,我看 update_sec_status 函数内部估计也要完善一下,里面没有对 FDB_SECTOR_STORE_FULL 状态进行判断,否则继续执行插入 TSL 的动作估计会有问题。方便提交一下这块的改动吗?

朱天龙 (Armink) 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
9021 armink 1578914611 346377 xwiron 1578920786
C
1
https://gitee.com/Armink/FlashDB.git
git@gitee.com:Armink/FlashDB.git
Armink
FlashDB
FlashDB

搜索帮助