-/* Copyright (c) 2008-2012 Da SimGrid Team. All rights reserved. */
+/* Copyright (c) 2008-2013 Da 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. */
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)
smx_rdv_t rdv = r1->call == SIMCALL_COMM_ISEND ? simcall_comm_isend__get__rdv(r1) : simcall_comm_irecv__get__rdv(r1);
- if(simcall_comm_wait__get__comm(r2)->comm.rdv != rdv)
+ if((simcall_comm_wait__get__comm(r2)->comm.rdv != rdv) && (simcall_comm_wait__get__timeout(r2) <= 0))
return FALSE;
- if(simcall_comm_wait__get__comm(r2)->comm.type == SIMIX_COMM_SEND && r1->call == SIMCALL_COMM_ISEND)
+ if((simcall_comm_wait__get__comm(r2)->comm.type == SIMIX_COMM_SEND) && (r1->call == SIMCALL_COMM_ISEND) && (simcall_comm_wait__get__timeout(r2) <= 0))
return FALSE;
- if(simcall_comm_wait__get__comm(r2)->comm.type == SIMIX_COMM_RECEIVE && r1->call == SIMCALL_COMM_IRECV)
+ if((simcall_comm_wait__get__comm(r2)->comm.type == SIMIX_COMM_RECEIVE) && (r1->call == SIMCALL_COMM_IRECV) && (simcall_comm_wait__get__timeout(r2) <= 0))
return FALSE;
}
smx_rdv_t rdv = r2->call == SIMCALL_COMM_ISEND ? simcall_comm_isend__get__rdv(r2) : simcall_comm_irecv__get__rdv(r2);
- if(simcall_comm_wait__get__comm(r1)->comm.rdv != rdv)
+ if((simcall_comm_wait__get__comm(r1)->comm.rdv != rdv) && (simcall_comm_wait__get__timeout(r1) <= 0))
return FALSE;
- if(simcall_comm_wait__get__comm(r1)->comm.type == SIMIX_COMM_SEND && r2->call == SIMCALL_COMM_ISEND)
+ if((simcall_comm_wait__get__comm(r1)->comm.type == SIMIX_COMM_SEND) && (r2->call == SIMCALL_COMM_ISEND) && (simcall_comm_wait__get__timeout(r1) <= 0))
return FALSE;
- if(simcall_comm_wait__get__comm(r1)->comm.type == SIMIX_COMM_RECEIVE && r2->call == SIMCALL_COMM_IRECV)
+ if((simcall_comm_wait__get__comm(r1)->comm.type == SIMIX_COMM_RECEIVE) && (r2->call == SIMCALL_COMM_IRECV) && (simcall_comm_wait__get__timeout(r1) <= 0))
return FALSE;
- }*/
+ }
/* FIXME: the following rule assumes that the result of the
* isend/irecv call is not stored in a buffer used in the
return FALSE;
}
+
+char *MC_request_get_dot_output(smx_simcall_t req, int value){
+
+ char *str = NULL, *label = NULL;
+ smx_action_t act = NULL;
+
+ switch(req->call){
+ case SIMCALL_COMM_ISEND:
+ label = xbt_strdup("iSend");
+ break;
+
+ case SIMCALL_COMM_IRECV:
+ label = xbt_strdup("iRecv");
+ break;
+
+ case SIMCALL_COMM_WAIT:
+ if(value == -1)
+ label = xbt_strdup("WaitTimeout");
+ else
+ label = xbt_strdup("Wait");
+ break;
+
+ case SIMCALL_COMM_TEST:
+ act = simcall_comm_test__get__comm(req);
+ if(act->comm.src_proc == NULL || act->comm.dst_proc == NULL)
+ label = xbt_strdup("Test FALSE");
+ else
+ label = xbt_strdup("Test TRUE");
+ break;
+
+ case SIMCALL_MC_RANDOM:
+ if(value == 0)
+ label = xbt_strdup("MC_RANDOM (0)");
+ else
+ label = xbt_strdup("MC_RANDOM (1)");
+ break;
+
+ case SIMCALL_MC_SNAPSHOT:
+ label = xbt_strdup("MC_SNAPSHOT");
+ break;
+
+ case SIMCALL_MC_COMPARE_SNAPSHOTS:
+ label = xbt_strdup("MC_COMPARE_SNAPSHOTS");
+ break;
+
+ default:
+ THROW_UNIMPLEMENTED;
+ }
+
+ str = bprintf("label = \"%s\", color = %s", label, colors[req->issuer->pid-1]);
+ xbt_free(label);
+ return str;
+
+}