From: Martin Quinson Date: Sun, 19 Mar 2023 15:18:05 +0000 (+0100) Subject: Differ the creation of the RemoteProcessMemory to when we have enough information X-Git-Tag: v3.34~294 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/500e034474c40c3426ff9a5a300b1170e3984e74 Differ the creation of the RemoteProcessMemory to when we have enough information --- diff --git a/src/mc/api/RemoteApp.cpp b/src/mc/api/RemoteApp.cpp index df0c81fb58..ba3a14f645 100644 --- a/src/mc/api/RemoteApp.cpp +++ b/src/mc/api/RemoteApp.cpp @@ -289,7 +289,7 @@ void RemoteApp::wait_for_requests() /* Resume the application */ if (checker_side_->get_channel().send(MessageType::CONTINUE) != 0) throw xbt::errno_error(); - get_remote_process_memory().clear_cache(); + checker_side_->clear_memory_cache(); if (checker_side_->running()) checker_side_->dispatch_events(); diff --git a/src/mc/remote/CheckerSide.cpp b/src/mc/remote/CheckerSide.cpp index 1660265aef..9c04307ab4 100644 --- a/src/mc/remote/CheckerSide.cpp +++ b/src/mc/remote/CheckerSide.cpp @@ -16,11 +16,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkerside, mc, "MC communication with the application"); namespace simgrid::mc { -CheckerSide::CheckerSide(int sockfd, pid_t pid) - : remote_memory_(std::make_unique(pid)) - , channel_(sockfd) - , running_(true) - , pid_(pid) +CheckerSide::CheckerSide(int sockfd, pid_t pid) : channel_(sockfd), running_(true), pid_(pid) { auto* base = event_base_new(); base_.reset(base); @@ -88,8 +84,8 @@ bool CheckerSide::handle_message(const char* buffer, ssize_t size) xbt_assert(size == sizeof(message), "Broken message. Got %d bytes instead of %d.", (int)size, (int)sizeof(message)); memcpy(&message, buffer, sizeof(message)); - - get_remote_memory().init(message.mmalloc_default_mdp); + /* Create the memory address space, now that we have the mandatory information */ + remote_memory_ = std::make_unique(pid_, message.mmalloc_default_mdp); break; } @@ -154,6 +150,12 @@ bool CheckerSide::handle_message(const char* buffer, ssize_t size) return true; } +void CheckerSide::clear_memory_cache() +{ + if (remote_memory_) + remote_memory_->clear_cache(); +} + void CheckerSide::handle_waitpid() { XBT_DEBUG("Check for wait event"); diff --git a/src/mc/remote/CheckerSide.hpp b/src/mc/remote/CheckerSide.hpp index 53f121cf58..d3e571ba65 100644 --- a/src/mc/remote/CheckerSide.hpp +++ b/src/mc/remote/CheckerSide.hpp @@ -47,8 +47,9 @@ public: pid_t get_pid() const { return pid_; } bool running() const { return running_; } void terminate() { running_ = false; } - RemoteProcessMemory& get_remote_memory() { return *remote_memory_.get(); } void handle_waitpid(); + RemoteProcessMemory& get_remote_memory() { return *remote_memory_.get(); } + void clear_memory_cache(); }; } // namespace simgrid::mc diff --git a/src/mc/sosp/RemoteProcessMemory.cpp b/src/mc/sosp/RemoteProcessMemory.cpp index 0a06fb456f..18093b32a3 100644 --- a/src/mc/sosp/RemoteProcessMemory.cpp +++ b/src/mc/sosp/RemoteProcessMemory.cpp @@ -106,9 +106,7 @@ int open_vm(pid_t pid, int flags) // ***** RemoteProcessMemory -RemoteProcessMemory::RemoteProcessMemory(pid_t pid) : AddressSpace(this), pid_(pid) {} - -void RemoteProcessMemory::init(xbt_mheap_t mmalloc_default_mdp) +RemoteProcessMemory::RemoteProcessMemory(pid_t pid, xbt_mheap_t mmalloc_default_mdp) : AddressSpace(this), pid_(pid) { this->heap_address = remote(mmalloc_default_mdp); diff --git a/src/mc/sosp/RemoteProcessMemory.hpp b/src/mc/sosp/RemoteProcessMemory.hpp index 7b4dff5979..eeff93246b 100644 --- a/src/mc/sosp/RemoteProcessMemory.hpp +++ b/src/mc/sosp/RemoteProcessMemory.hpp @@ -50,9 +50,8 @@ private: static constexpr int cache_malloc = 2; public: - explicit RemoteProcessMemory(pid_t pid); + explicit RemoteProcessMemory(pid_t pid, xbt_mheap_t mmalloc_default_mdp); ~RemoteProcessMemory() override; - void init(xbt_mheap_t mmalloc_default_mdp); RemoteProcessMemory(RemoteProcessMemory const&) = delete; RemoteProcessMemory(RemoteProcessMemory&&) = delete; diff --git a/src/mc/sosp/Snapshot_test.cpp b/src/mc/sosp/Snapshot_test.cpp index 0883e1ea8c..237065b7e0 100644 --- a/src/mc/sosp/Snapshot_test.cpp +++ b/src/mc/sosp/Snapshot_test.cpp @@ -55,8 +55,7 @@ void snap_test_helper::Init() REQUIRE(xbt_pagesize == getpagesize()); REQUIRE(1 << xbt_pagebits == xbt_pagesize); - memory_ = std::make_unique(getpid()); - memory_->init(nullptr); + memory_ = std::make_unique(getpid(), nullptr); } snap_test_helper::prologue_return snap_test_helper::prologue(int n) diff --git a/teshsuite/mc/dwarf-expression/dwarf-expression.cpp b/teshsuite/mc/dwarf-expression/dwarf-expression.cpp index 2e50663798..cccdce3709 100644 --- a/teshsuite/mc/dwarf-expression/dwarf-expression.cpp +++ b/teshsuite/mc/dwarf-expression/dwarf-expression.cpp @@ -148,8 +148,7 @@ static void test_deref(simgrid::dwarf::ExpressionContext const& state) int main() { - auto* process = new simgrid::mc::RemoteProcessMemory(getpid()); - process->init(nullptr); + auto* process = new simgrid::mc::RemoteProcessMemory(getpid(), nullptr); simgrid::dwarf::ExpressionContext state; state.address_space = (simgrid::mc::AddressSpace*) process; diff --git a/teshsuite/mc/dwarf/dwarf.cpp b/teshsuite/mc/dwarf/dwarf.cpp index b564b1caa3..aa8654585e 100644 --- a/teshsuite/mc/dwarf/dwarf.cpp +++ b/teshsuite/mc/dwarf/dwarf.cpp @@ -122,8 +122,7 @@ int main(int argc, char** argv) const simgrid::mc::Variable* var; simgrid::mc::Type* type; - simgrid::mc::RemoteProcessMemory process(getpid()); - process.init(nullptr); + simgrid::mc::RemoteProcessMemory process(getpid(), nullptr); test_global_variable(process, process.binary_info.get(), "some_local_variable", &some_local_variable, sizeof(int));