summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
d2bb338)
- consider timeouts on wait calls
- test calls are always enabled
- do not destroy surf actions on comm_cancel when running the MC
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9453
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
req->issuer->waiting_action = action;
if (MC_IS_ENABLED){
req->issuer->waiting_action = action;
if (MC_IS_ENABLED){
- action->state = SIMIX_DONE;
+ if(action->comm.src_proc && action->comm.dst_proc){
+ action->state = SIMIX_DONE;
+ }else{
+ /* If we reached this point, the wait request must have a timeout */
+ /* Otherwise it shouldn't be enabled and executed by the MC */
+ if(timeout == -1)
+ THROW_IMPOSSIBLE;
+
+ if(action->comm.src_proc == req->issuer)
+ action->state = SIMIX_SRC_TIMEOUT;
+ else
+ action->state = SIMIX_DST_TIMEOUT;
+ }
+
SIMIX_comm_finish(action);
return;
}
SIMIX_comm_finish(action);
return;
}
SIMIX_rdv_remove(action->comm.rdv, action);
action->state = SIMIX_FAILED;
} else {
SIMIX_rdv_remove(action->comm.rdv, action);
action->state = SIMIX_FAILED;
} else {
- surf_workstation_model->action_cancel(action->comm.surf_comm);
+ /* When running the MC there are no surf actions */
+ if(!MC_IS_ENABLED)
+ surf_workstation_model->action_cancel(action->comm.surf_comm);
case REQ_COMM_WAIT:
/* FIXME: check also that src and dst processes are not suspended */
case REQ_COMM_WAIT:
/* FIXME: check also that src and dst processes are not suspended */
+ /* If there is a timeout it will be always enabled because, if the
+ * communication is not ready, it can timeout.
+ * This avoids false positives on dead-locks */
+ if(req->comm_wait.timeout >= 0)
+ return TRUE;
+
act = req->comm_wait.comm;
return (act->comm.src_proc && act->comm.dst_proc);
break;
act = req->comm_wait.comm;
return (act->comm.src_proc && act->comm.dst_proc);
break;
- case REQ_COMM_TEST:
- act = req->comm_test.comm;
- return (act->comm.src_proc && act->comm.dst_proc);
- break;
-