Skip to content

Commit 1ab05c2

Browse files
author
Cruz Monrreal
authored
Merge pull request #7721 from orenc17/nvstore_owner_bug
Fix owner restoration and discard across nvstore init
2 parents 509869d + b9fb265 commit 1ab05c2

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

features/nvstore/source/nvstore.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ int NVStore::copy_record(uint8_t from_area, uint32_t from_offset, uint32_t to_of
519519

520520
int NVStore::garbage_collection(uint16_t key, uint16_t flags, uint8_t owner, uint16_t buf_size, const void *buf)
521521
{
522-
uint32_t curr_offset, new_area_offset, next_offset;
522+
uint32_t curr_offset, new_area_offset, next_offset, curr_owner;
523523
int ret;
524524
uint8_t curr_area;
525525

@@ -534,7 +534,8 @@ int NVStore::garbage_collection(uint16_t key, uint16_t flags, uint8_t owner, uin
534534
return ret;
535535
}
536536
_offset_by_key[key] = new_area_offset | (1 - _active_area) << offs_by_key_area_bit_pos |
537-
(((flags & set_once_flag) != 0) << offs_by_key_set_once_bit_pos);
537+
(((flags & set_once_flag) != 0) << offs_by_key_set_once_bit_pos) |
538+
(owner << offs_by_key_owner_bit_pos);
538539
new_area_offset = next_offset;
539540
}
540541

@@ -544,15 +545,16 @@ int NVStore::garbage_collection(uint16_t key, uint16_t flags, uint8_t owner, uin
544545
curr_offset = _offset_by_key[key];
545546
uint16_t save_flags = curr_offset & offs_by_key_flag_mask & ~offs_by_key_area_mask;
546547
curr_area = (uint8_t)(curr_offset >> offs_by_key_area_bit_pos) & 1;
547-
curr_offset &= ~offs_by_key_flag_mask;
548+
curr_owner = _offset_by_key[key] & offs_by_key_owner_mask;
549+
curr_offset &= offs_by_key_offset_mask;
548550
if ((!curr_offset) || (curr_area != _active_area)) {
549551
continue;
550552
}
551553
ret = copy_record(curr_area, curr_offset, new_area_offset, next_offset);
552554
if (ret != NVSTORE_SUCCESS) {
553555
return ret;
554556
}
555-
_offset_by_key[key] = new_area_offset | (1 - curr_area) << offs_by_key_area_bit_pos | save_flags;
557+
_offset_by_key[key] = new_area_offset | (1 - curr_area) << offs_by_key_area_bit_pos | save_flags | curr_owner;
556558
new_area_offset = next_offset;
557559
}
558560

0 commit comments

Comments
 (0)