summaryrefslogtreecommitdiff
path: root/src/storage
diff options
context:
space:
mode:
Diffstat (limited to 'src/storage')
-rw-r--r--src/storage/store.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/storage/store.c b/src/storage/store.c
index 45621d1..5701578 100644
--- a/src/storage/store.c
+++ b/src/storage/store.c
@@ -1957,16 +1957,26 @@ tiny_store_import(tiny_store_t *store,
}
if (existing != NULL)
{
+ tiny_message_t replacement;
+ tiny_message_init(&replacement);
+ if (tiny_message_copy(&replacement, &record->message) != 0)
+ {
+ status = TINY_STORE_NO_MEMORY;
+ break;
+ }
tiny_message_free(&existing->message);
existing->deleted = record->deleted;
existing->sequence = (uint64_t)record->message.timestamp_ms;
- existing->message = record->message;
+ existing->message = replacement;
(*imported_count)++;
}
else
{
- if (!ensure_entries(store))
+ tiny_message_t copied;
+ tiny_message_init(&copied);
+ if (!ensure_entries(store) || tiny_message_copy(&copied, &record->message) != 0)
{
+ tiny_message_free(&copied);
status = TINY_STORE_NO_MEMORY;
break;
}
@@ -1974,7 +1984,7 @@ tiny_store_import(tiny_store_t *store,
&store->entries[store->entry_count], 0, sizeof(store->entries[store->entry_count]));
store->entries[store->entry_count].deleted = record->deleted;
store->entries[store->entry_count].sequence = (uint64_t)record->message.timestamp_ms;
- store->entries[store->entry_count].message = record->message;
+ store->entries[store->entry_count].message = copied;
store->entry_count++;
(*imported_count)++;
}