From 748574c7b4393dd5e1393cc2bcbd0247d0e09799 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 26 Jan 2025 07:56:36 +0100 Subject: [PATCH] Fix emulator resetting --- src/windows-emulator-test/serialization_test.cpp | 6 +++--- src/windows-emulator/process_context.hpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/windows-emulator-test/serialization_test.cpp b/src/windows-emulator-test/serialization_test.cpp index d86a4fde..03f80e15 100644 --- a/src/windows-emulator-test/serialization_test.cpp +++ b/src/windows-emulator-test/serialization_test.cpp @@ -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(); diff --git a/src/windows-emulator/process_context.hpp b/src/windows-emulator/process_context.hpp index 0a544474..a21ac6da 100644 --- a/src/windows-emulator/process_context.hpp +++ b/src/windows-emulator/process_context.hpp @@ -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());