Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : get hash of local and global variables which are not pointers
[simgrid.git] / src / mc / mc_request.c
index 393953e..4e12e96 100644 (file)
@@ -18,13 +18,16 @@ int MC_request_depend(smx_simcall_t r1, smx_simcall_t r2) {
   if (r1->issuer == r2->issuer)
     return FALSE;
 
+  if((r1->call == SIMCALL_MC_RANDOM) || (r2->call == SIMCALL_MC_RANDOM))
+    return FALSE;
+
   if(r1->call == SIMCALL_COMM_ISEND && r2->call == SIMCALL_COMM_IRECV)
     return FALSE;
 
   if(r1->call == SIMCALL_COMM_IRECV && r2->call == SIMCALL_COMM_ISEND)
     return FALSE;
 
-  if(   (r1->call == SIMCALL_COMM_ISEND /*|| r1->call == SIMCALL_COMM_IRECV*/)
+  /*if(   (r1->call == SIMCALL_COMM_ISEND || r1->call == SIMCALL_COMM_IRECV)
         &&  r2->call == SIMCALL_COMM_WAIT){
 
     if(simcall_comm_wait__get__comm(r2)->comm.rdv == NULL)
@@ -42,7 +45,7 @@ int MC_request_depend(smx_simcall_t r1, smx_simcall_t r2) {
       return FALSE;
   }
 
-  if(   (r2->call == SIMCALL_COMM_ISEND /*|| r2->call == SIMCALL_COMM_IRECV*/)
+  if(   (r2->call == SIMCALL_COMM_ISEND || r2->call == SIMCALL_COMM_IRECV)
         &&  r1->call == SIMCALL_COMM_WAIT){
 
     if(simcall_comm_wait__get__comm(r1)->comm.rdv != NULL)
@@ -58,7 +61,7 @@ int MC_request_depend(smx_simcall_t r1, smx_simcall_t r2) {
 
     if(simcall_comm_wait__get__comm(r1)->comm.type == SIMIX_COMM_RECEIVE && r2->call == SIMCALL_COMM_IRECV)
       return FALSE;
-  }
+      }*/
 
   /* FIXME: the following rule assumes that the result of the
    * isend/irecv call is not stored in a buffer used in the
@@ -177,7 +180,7 @@ char *MC_request_to_string(smx_simcall_t req, int value)
   size_t size = 0;
 
   switch(req->call){
-  case SIMCALL_COMM_ISEND:
+    case SIMCALL_COMM_ISEND:
     type = xbt_strdup("iSend");
     p = pointer_to_string(simcall_comm_isend__get__src_buff(req));
     bs = buff_size_to_string(simcall_comm_isend__get__src_buff_size(req));
@@ -248,13 +251,22 @@ char *MC_request_to_string(smx_simcall_t req, int value)
     args = '\0';
     break;
 
+  case SIMCALL_MC_RANDOM:
+    type = xbt_strdup("MC_RANDOM");
+    args = '\0';
+    break;
+
   default:
     THROW_UNIMPLEMENTED;
   }
 
-  str = bprintf("[(%lu)%s] %s (%s)", req->issuer->pid ,req->issuer->name, type, args);
+  if(args != NULL){
+    str = bprintf("[(%lu)%s] %s (%s)", req->issuer->pid ,req->issuer->name, type, args);
+    xbt_free(args);
+  }else{
+    str = bprintf("[(%lu)%s] %s ", req->issuer->pid ,req->issuer->name, type);
+  }
   xbt_free(type);
-  xbt_free(args);
   xbt_free(p);
   xbt_free(bs);
   return str;
@@ -281,6 +293,7 @@ int MC_request_is_visible(smx_simcall_t req)
     || req->call == SIMCALL_COMM_WAITANY
     || req->call == SIMCALL_COMM_TEST
     || req->call == SIMCALL_COMM_TESTANY
+    || req->call == SIMCALL_MC_RANDOM
     || req->call == SIMCALL_MC_SNAPSHOT
     || req->call == SIMCALL_MC_COMPARE_SNAPSHOTS;
 }
@@ -299,7 +312,7 @@ int MC_request_is_enabled(smx_simcall_t req)
      * communication is not ready, it can timeout and won't block.
      * On the other hand if it hasn't a timeout, check if the comm is ready.*/
     if(simcall_comm_wait__get__timeout(req) >= 0){
-      if(_surf_mc_timeout == 1){
+      if(_sg_mc_timeout == 1){
         return TRUE;
       }else{
         act = simcall_comm_wait__get__comm(req);