1
0
mirror of https://gitee.com/openLuat/LuatOS synced 2025-08-17 22:18:03 +08:00

fix: fdb/fskv库的迭代器运行异常 https://gitee.com/openLuat/LuatOS/issues/I6DX8P

This commit is contained in:
Wendal Chen 2023-02-09 22:23:56 +08:00
parent 21b49a1879
commit 8f3963f668
3 changed files with 35 additions and 5 deletions

View File

@ -102,18 +102,20 @@ int luat_fskv_size(const char* key, char buff[4]) {
int luat_fskv_next(char* buff, size_t offset) {
lfs_dir_t dir = {0};
struct lfs_info info = {0};
// offset要+2, 因为前2个值是"."和".."两个dir
offset += 2;
int ret = lfs_dir_open(&sfd_lfs->lfs, &dir, "");
if (ret != LFS_ERR_OK) {
if (ret < 0) {
LLOGW("lfs_dir_open ret %d", ret);
return -1;
}
ret = lfs_dir_seek(&sfd_lfs->lfs, &dir, offset);
if (ret != LFS_ERR_OK) {
if (ret < 0) {
lfs_dir_close(&sfd_lfs->lfs, &dir);
return -2;
}
ret = lfs_dir_read(&sfd_lfs->lfs, &dir, &info);
if (ret != LFS_ERR_OK) {
if (ret <= 0) {
lfs_dir_close(&sfd_lfs->lfs, &dir);
return -3;
}

View File

@ -373,6 +373,7 @@ static int l_fskv_next(lua_State *L) {
size_t *offset = lua_touserdata(L, 1);
char buff[256] = {0};
int ret = luat_fskv_next(buff, *offset);
// LLOGD("fskv.next %d %d", *offset, ret);
if (ret == 0) {
lua_pushstring(L, buff);
*offset = *offset + 1;

View File

@ -54,10 +54,37 @@ sys.taskInit(function()
local t = fdb.kv_get("my_bool")
log.info("fdb", "my_bool", type(t), t)
while true do
sys.wait(100)
if fdb.kv_iter then
local iter = fdb.kv_iter()
if iter then
while 1 do
local k = fdb.kv_next(iter)
if not k then
log.info("fdb", "iter exit")
break
end
log.info("fdb", k, "value", fdb.kv_get(k))
end
else
log.info("fdb", "iter is null")
end
else
log.info("fdb", "without iter")
end
-- 压力测试
local start = mcu.ticks()
local count = 1000
while count > 0 do
-- sys.wait(10)
count = count - 1
-- fdb.kv_set("BENT1", "--" .. os.date() .. "--")
-- fdb.kv_set("BENT2", "--" .. os.date() .. "--")
-- fdb.kv_set("BENT3", "--" .. os.date() .. "--")
-- fdb.kv_set("BENT4", "--" .. os.date() .. "--")
fdb.kv_get("my_bool")
end
log.info("fdb", (mcu.ticks() - start) / 1000)
end)
-- 用户代码已结束---------------------------------------------