@@ -519,7 +519,7 @@ int NVStore::copy_record(uint8_t from_area, uint32_t from_offset, uint32_t to_of
519
519
520
520
int NVStore::garbage_collection (uint16_t key, uint16_t flags, uint8_t owner, uint16_t buf_size, const void *buf)
521
521
{
522
- uint32_t curr_offset, new_area_offset, next_offset;
522
+ uint32_t curr_offset, new_area_offset, next_offset, curr_owner ;
523
523
int ret;
524
524
uint8_t curr_area;
525
525
@@ -534,7 +534,8 @@ int NVStore::garbage_collection(uint16_t key, uint16_t flags, uint8_t owner, uin
534
534
return ret;
535
535
}
536
536
_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);
538
539
new_area_offset = next_offset;
539
540
}
540
541
@@ -544,15 +545,16 @@ int NVStore::garbage_collection(uint16_t key, uint16_t flags, uint8_t owner, uin
544
545
curr_offset = _offset_by_key[key];
545
546
uint16_t save_flags = curr_offset & offs_by_key_flag_mask & ~offs_by_key_area_mask;
546
547
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;
548
550
if ((!curr_offset) || (curr_area != _active_area)) {
549
551
continue ;
550
552
}
551
553
ret = copy_record (curr_area, curr_offset, new_area_offset, next_offset);
552
554
if (ret != NVSTORE_SUCCESS) {
553
555
return ret;
554
556
}
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 ;
556
558
new_area_offset = next_offset;
557
559
}
558
560
0 commit comments