Fix emulator resetting

This commit is contained in:
momo5502
2025-01-26 07:56:36 +01:00
parent 4597f3b6d6
commit 748574c7b4
2 changed files with 18 additions and 3 deletions

View File

@@ -6,14 +6,14 @@ namespace test
{
auto emu = create_sample_emulator();
utils::buffer_serializer serializer{};
emu.serialize(serializer);
utils::buffer_serializer start_state{};
emu.serialize(start_state);
emu.start();
ASSERT_TERMINATED_SUCCESSFULLY(emu);
utils::buffer_deserializer deserializer{serializer.get_buffer()};
utils::buffer_deserializer deserializer{start_state.get_buffer()};
emu.deserialize(deserializer);
emu.start();

View File

@@ -338,6 +338,11 @@ class moved_marker
return this->was_moved_;
}
void mark_as_moved()
{
this->was_moved_ = true;
}
private:
bool was_moved_{false};
};
@@ -498,6 +503,11 @@ class emulator_thread : ref_counted_object
buffer.read_vector(this->last_registers);
}
void leak_memory()
{
this->marker.mark_as_moved();
}
private:
void setup_registers(x64_emulator& emu, const process_context& context) const;
@@ -657,6 +667,11 @@ struct process_context
buffer.read_vector(this->default_register_set);
buffer.read(this->spawned_thread_count);
for (auto& thread : this->threads | std::views::values)
{
thread.leak_memory();
}
buffer.read(this->threads);
this->active_thread = this->threads.get(buffer.read<uint64_t>());