A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Make SIMIX_req_comm(test/wait/testany/waitany) requests to destroy the comm actions.
[simgrid.git]
/
src
/
msg
/
msg_mailbox.c
diff --git
a/src/msg/msg_mailbox.c
b/src/msg/msg_mailbox.c
index
974d4b3
..
194c133
100644
(file)
--- a/
src/msg/msg_mailbox.c
+++ b/
src/msg/msg_mailbox.c
@@
-72,7
+72,7
@@
MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, m_task_t * task,
{
xbt_ex_t e;
MSG_error_t ret = MSG_OK;
- smx_action_t comm = NULL;
+
volatile
smx_action_t comm = NULL;
#ifdef HAVE_TRACING
double start_time = 0;
#endif
@@
-97,7
+97,7
@@
MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, m_task_t * task,
TRY {
comm = SIMIX_req_comm_irecv(mailbox, task, NULL, NULL, NULL);
SIMIX_req_comm_wait(comm, timeout);
-
SIMIX_req_comm_destroy(comm)
;
+
(*task)->simdata->comm = comm
;
DEBUG2("Got task %s from %p",(*task)->name,mailbox);
(*task)->simdata->isused=0;
}
@@
-113,11
+113,13
@@
MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, m_task_t * task,
ret = MSG_TIMEOUT;
break;
default:
- xbt_backtrace_display(&e);
- xbt_die(bprintf("Unhandled SIMIX network exception: %s", e.msg));
+ RETHROW;
}
xbt_ex_free(e);
}
+ if (comm != NULL) {
+ //SIMIX_req_comm_destroy(comm);
+ }
if (ret != MSG_HOST_FAILURE &&
ret != MSG_TRANSFER_FAILURE && ret != MSG_TIMEOUT) {
@@
-136,6
+138,7
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
MSG_error_t ret = MSG_OK;
simdata_task_t t_simdata = NULL;
m_process_t process = MSG_process_self();
+ volatile smx_action_t comm = NULL;
#ifdef HAVE_TRACING
int call_end = 0;
#endif
@@
-145,7
+148,6
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
call_end = TRACE_msg_task_put_start(task); //must be after CHECK_HOST()
#endif
-
/* Prepare the task to send */
t_simdata = task->simdata;
t_simdata->sender = process;
@@
-161,13
+163,13
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
/* Try to send it by calling SIMIX network layer */
TRY {
- t_simdata->comm = SIMIX_req_comm_isend(mailbox, t_simdata->message_size,
- t_simdata->rate, task, sizeof(void *), NULL, NULL);
+ comm = SIMIX_req_comm_isend(mailbox, t_simdata->message_size,
+ t_simdata->rate, task, sizeof(void *), NULL, NULL, 0);
+ t_simdata->comm = comm;
#ifdef HAVE_TRACING
- SIMIX_req_set_category(
t_simdata->
comm, task->category);
+ SIMIX_req_set_category(comm, task->category);
#endif
- SIMIX_req_comm_wait(t_simdata->comm, timeout);
- SIMIX_req_comm_destroy(t_simdata->comm);
+ SIMIX_req_comm_wait(comm, timeout);
}
CATCH(e) {
@@
-182,7
+184,7
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
ret = MSG_TIMEOUT;
break;
default:
-
xbt_die(bprintf("Unhandled SIMIX network exception: %s", e.msg))
;
+
RETHROW
;
}
xbt_ex_free(e);
@@
-190,6
+192,10
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
t_simdata->isused=0;
}
+ if (comm != NULL) {
+ //SIMIX_req_comm_destroy(comm);
+ }
+
process->simdata->waiting_task = NULL;
#ifdef HAVE_TRACING
if (call_end)