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:
parent
21b49a1879
commit
8f3963f668
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
||||
-- 用户代码已结束---------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue
Block a user