Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix bug in SMPI tracing, where messages were sometimes badly matched.
authordegomme <augustin.degomme@unibas.ch>
Thu, 20 Oct 2016 13:09:23 +0000 (15:09 +0200)
committerdegomme <augustin.degomme@unibas.ch>
Thu, 20 Oct 2016 13:09:42 +0000 (15:09 +0200)
This eparates sent and received messages when trying to match a new one to avoid matching a send with another send.

src/smpi/instr_smpi.cpp

index ee21f42..19b4545 100644 (file)
@@ -99,7 +99,7 @@ static char *TRACE_smpi_put_key(int src, int dst, char *key, int n)
 {
   //get the dynar for src#dst
   char aux[INSTR_DEFAULT_STR_SIZE];
 {
   //get the dynar for src#dst
   char aux[INSTR_DEFAULT_STR_SIZE];
-  snprintf(aux, INSTR_DEFAULT_STR_SIZE, "%d#%d", src, dst);
+  snprintf(aux, INSTR_DEFAULT_STR_SIZE, "r%d#%d", src, dst);
   xbt_dynar_t d = static_cast<xbt_dynar_t>(xbt_dict_get_or_null(keys, aux));
 
   if(xbt_dynar_is_empty(d) == 0){
   xbt_dynar_t d = static_cast<xbt_dynar_t>(xbt_dict_get_or_null(keys, aux));
 
   if(xbt_dynar_is_empty(d) == 0){
@@ -110,6 +110,7 @@ static char *TRACE_smpi_put_key(int src, int dst, char *key, int n)
 
   if (d == nullptr) {
     d = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
 
   if (d == nullptr) {
     d = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
+    snprintf(aux, INSTR_DEFAULT_STR_SIZE, "s%d#%d", src, dst);
     xbt_dict_set(keys, aux, d, nullptr);
   }
 
     xbt_dict_set(keys, aux, d, nullptr);
   }
 
@@ -128,7 +129,7 @@ static char *TRACE_smpi_put_key(int src, int dst, char *key, int n)
 static char *TRACE_smpi_get_key(int src, int dst, char *key, int n)
 {
   char aux[INSTR_DEFAULT_STR_SIZE];
 static char *TRACE_smpi_get_key(int src, int dst, char *key, int n)
 {
   char aux[INSTR_DEFAULT_STR_SIZE];
-  snprintf(aux, INSTR_DEFAULT_STR_SIZE, "%d#%d", src, dst);
+  snprintf(aux, INSTR_DEFAULT_STR_SIZE, "s%d#%d", src, dst);
   xbt_dynar_t d = static_cast<xbt_dynar_t>(xbt_dict_get_or_null(keys, aux));
 
   // sometimes the receive may be posted before the send
   xbt_dynar_t d = static_cast<xbt_dynar_t>(xbt_dict_get_or_null(keys, aux));
 
   // sometimes the receive may be posted before the send