Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
smpi_replay: allow to register extra events before things start (+plug a memleak)
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 1 Mar 2017 14:25:49 +0000 (15:25 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 1 Mar 2017 14:26:26 +0000 (15:26 +0100)
examples/smpi/replay/replay.c
include/xbt/replay.h
src/smpi/smpi_replay.cpp
src/xbt/xbt_replay.cpp

index 4f98b70..7812f6c 100644 (file)
@@ -1,13 +1,24 @@
-/* Copyright (c) 2009-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <stdio.h>
+#include "xbt/replay.h"
 #include "smpi/smpi.h"
 
+/* This shows how to extend the trace format by adding a new kind of events.
+   This function is registered through xbt_replay_action_register() below. */
+static void action_blah(const char* const* args)
+{
+  /* Add your answer to the blah event here.
+     args is a strings array containing the blank-separated parameters found in the trace for this event instance. */
+}
+
 int main(int argc, char *argv[]) {
+  /* Connect your calllback function to the "blah" event in the trace files */
+  xbt_replay_action_register("blah", action_blah);
+
+  /* The regular run of the replayer */
   smpi_replay_run(&argc, &argv);
   return 0;
 }
index 8267a42..4524619 100644 (file)
@@ -8,7 +8,8 @@
 
 #ifndef XBT_REPLAY_H
 #define XBT_REPLAY_H
-#include "xbt/misc.h"           /* SG_BEGIN_DECL */
+
+#include "xbt/dict.h"
 
 SG_BEGIN_DECL()
 
index e769717..1b6dd41 100644 (file)
@@ -1,12 +1,10 @@
-/* Copyright (c) 2009-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "private.h"
-#include <xbt.h>
-#include <xbt/replay.h>
+#include "xbt/replay.h"
 #include <unordered_map>
 #include <vector>
 
@@ -169,7 +167,7 @@ static void action_init(const char *const *action)
 
 static void action_finalize(const char *const *action)
 {
-  /* do nothing */
+  /* Nothing to do */
 }
 
 static void action_comm_size(const char *const *action)
@@ -971,6 +969,7 @@ void smpi_replay_run(int *argc, char***argv){
     }
     smpi_mpi_waitall(count_requests, requests, status);
   }
+  delete get_reqq_self();
   active_processes--;
 
   if(active_processes==0){
index 2fd02d3..d0b7197 100644 (file)
@@ -109,6 +109,9 @@ void xbt_replay_reader_free(xbt_replay_reader_t *reader)
  */
 void xbt_replay_action_register(const char *action_name, action_fun function)
 {
+  if (xbt_action_funs == nullptr) // If the user registers a function before the start
+    _xbt_replay_action_init();
+
   char* lowername = str_tolower (action_name);
   xbt_dict_set(xbt_action_funs, lowername, (void*) function, nullptr);
   xbt_free(lowername);