X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2eb1a8a54c227887b868d199a590e585cb9b84d6..255192ad7c234ae1f6631d080b0d2d9cfc60ec1b:/src/xbt/xbt_replay.cpp diff --git a/src/xbt/xbt_replay.cpp b/src/xbt/xbt_replay.cpp index 23be2f5f1b..a266f7ea02 100644 --- a/src/xbt/xbt_replay.cpp +++ b/src/xbt/xbt_replay.cpp @@ -17,6 +17,7 @@ namespace xbt { std::ifstream* action_fs = nullptr; std::unordered_map action_funs; +static std::unordered_map*> action_queues; static void read_and_trim_line(std::ifstream* fs, std::string* line) { @@ -54,7 +55,7 @@ bool ReplayReader::get(ReplayAction* action) return not fs->eof(); } -static ReplayAction get_action(char* name) +static ReplayAction* get_action(char* name) { ReplayAction* action; @@ -75,7 +76,7 @@ static ReplayAction get_action(char* name) // if it's for me, I'm done std::string evtname = action->front(); if (evtname.compare(name) == 0) { - return *action; + return action; } else { // Else, I have to store it for the relevant colleague std::queue* otherqueue = nullptr; @@ -94,10 +95,10 @@ static ReplayAction get_action(char* name) // Get something from my queue and return it action = myqueue->front(); myqueue->pop(); - return *action; + return action; } - return ReplayAction(); + return nullptr; } static void handle_action(ReplayAction& action) @@ -120,10 +121,11 @@ int replay_runner(int argc, char* argv[]) { if (simgrid::xbt::action_fs) { // A unique trace file while (true) { - simgrid::xbt::ReplayAction evt(simgrid::xbt::get_action(argv[0])); - if (evt.empty()) + simgrid::xbt::ReplayAction* evt = simgrid::xbt::get_action(argv[0]); + if (!evt) break; - simgrid::xbt::handle_action(evt); + simgrid::xbt::handle_action(*evt); + delete evt; } if (action_queues.find(std::string(argv[0])) != action_queues.end()) { std::queue* myqueue = action_queues.at(std::string(argv[0]));