mirror of
https://github.com/armink/FlashDB.git
synced 2025-02-04 08:43:07 +08:00
[tsdb] Fix append bug when tsdb is full. Thx @xwiron report.
This commit is contained in:
parent
cba9612797
commit
8114f88147
@ -305,6 +305,7 @@ static fdb_err_t update_sec_status(fdb_tsdb_t db, tsdb_sec_info_t sector, fdb_bl
|
|||||||
}
|
}
|
||||||
/* change current sector to full */
|
/* change current sector to full */
|
||||||
_FDB_WRITE_STATUS(db, cur_sec_addr, status, FDB_SECTOR_STORE_STATUS_NUM, FDB_SECTOR_STORE_FULL, true);
|
_FDB_WRITE_STATUS(db, cur_sec_addr, status, FDB_SECTOR_STORE_STATUS_NUM, FDB_SECTOR_STORE_FULL, true);
|
||||||
|
sector->status = FDB_SECTOR_STORE_FULL;
|
||||||
/* calculate next sector address */
|
/* calculate next sector address */
|
||||||
if (sector->addr + db_sec_size(db) < db_max_size(db)) {
|
if (sector->addr + db_sec_size(db) < db_max_size(db)) {
|
||||||
new_sec_addr = sector->addr + db_sec_size(db);
|
new_sec_addr = sector->addr + db_sec_size(db);
|
||||||
@ -326,6 +327,9 @@ static fdb_err_t update_sec_status(fdb_tsdb_t db, tsdb_sec_info_t sector, fdb_bl
|
|||||||
format_sector(db, new_sec_addr);
|
format_sector(db, new_sec_addr);
|
||||||
read_sector_info(db, new_sec_addr, &db->cur_sec, false);
|
read_sector_info(db, new_sec_addr, &db->cur_sec, false);
|
||||||
}
|
}
|
||||||
|
} else if (sector->status == FDB_SECTOR_STORE_FULL) {
|
||||||
|
/* database full */
|
||||||
|
return FDB_SAVED_FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sector->status == FDB_SECTOR_STORE_EMPTY) {
|
if (sector->status == FDB_SECTOR_STORE_EMPTY) {
|
||||||
@ -772,6 +776,8 @@ fdb_err_t fdb_tsdb_init(fdb_tsdb_t db, const char *name, const char *path, fdb_g
|
|||||||
latest_addr = check_sec_arg.empty_addr;
|
latest_addr = check_sec_arg.empty_addr;
|
||||||
} else {
|
} else {
|
||||||
latest_addr = db->cur_sec.addr;
|
latest_addr = db->cur_sec.addr;
|
||||||
|
/* There is no empty sector. */
|
||||||
|
latest_addr = db->cur_sec.addr = db_max_size(db) - db_sec_size(db);
|
||||||
}
|
}
|
||||||
/* db->cur_sec is the latest sector, and the next is the oldest sector */
|
/* 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)) {
|
if (latest_addr + db_sec_size(db) >= db_max_size(db)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user