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
fix the logic of refcount in msg_task_t by ... killing it. It's now a boolean indicat...
[simgrid.git]
/
src
/
msg
/
msg_mailbox.c
diff --git
a/src/msg/msg_mailbox.c
b/src/msg/msg_mailbox.c
index
c4fb1ea
..
c77de82
100644
(file)
--- a/
src/msg/msg_mailbox.c
+++ b/
src/msg/msg_mailbox.c
@@
-13,7
+13,7
@@
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_mailbox, msg,
msg_mailbox_t MSG_mailbox_new(const char *alias)
{
msg_mailbox_t MSG_mailbox_new(const char *alias)
{
- return SIMIX_req_rdv_create(alias
? xbt_strdup(alias) : NULL
);
+ return SIMIX_req_rdv_create(alias);
}
void MSG_mailbox_free(void *mailbox)
}
void MSG_mailbox_free(void *mailbox)
@@
-33,7
+33,7
@@
m_task_t MSG_mailbox_get_head(msg_mailbox_t mailbox)
if (!comm)
return NULL;
if (!comm)
return NULL;
- return (m_task_t) SIMIX_req_comm_get_data(comm);
+ return (m_task_t) SIMIX_req_comm_get_
src_
data(comm);
}
int
}
int
@@
-95,10
+95,11
@@
MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, m_task_t * task,
/* Try to receive it by calling SIMIX network layer */
TRY {
/* Try to receive it by calling SIMIX network layer */
TRY {
- comm = SIMIX_req_comm_irecv(mailbox, task, NULL);
+ comm = SIMIX_req_comm_irecv(mailbox, task, NULL
, NULL, NULL
);
SIMIX_req_comm_wait(comm, timeout);
SIMIX_req_comm_wait(comm, timeout);
+ SIMIX_req_comm_destroy(comm);
DEBUG2("Got task %s from %p",(*task)->name,mailbox);
DEBUG2("Got task %s from %p",(*task)->name,mailbox);
- (*task)->simdata->
refcount--
;
+ (*task)->simdata->
isused=0
;
}
CATCH(e) {
switch (e.category) {
}
CATCH(e) {
switch (e.category) {
@@
-150,10
+151,10
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
t_simdata->sender = process;
t_simdata->source = MSG_host_self();
t_simdata->sender = process;
t_simdata->source = MSG_host_self();
- xbt_assert0(t_simdata->
refcount == 1
,
+ xbt_assert0(t_simdata->
isused == 0
,
"This task is still being used somewhere else. You cannot send it now. Go fix your code!");
"This task is still being used somewhere else. You cannot send it now. Go fix your code!");
- t_simdata->
refcount++
;
+ t_simdata->
isused=1
;
msg_global->sent_msg++;
process->simdata->waiting_task = task;
msg_global->sent_msg++;
process->simdata->waiting_task = task;
@@
-161,8
+162,12
@@
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,
/* 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 *), task);
+ t_simdata->rate, task, sizeof(void *), NULL, task);
+#ifdef HAVE_TRACING
+ SIMIX_req_set_category(t_simdata->comm, task->category);
+#endif
SIMIX_req_comm_wait(t_simdata->comm, timeout);
SIMIX_req_comm_wait(t_simdata->comm, timeout);
+ SIMIX_req_comm_destroy(t_simdata->comm);
}
CATCH(e) {
}
CATCH(e) {
@@
-181,8
+186,8
@@
MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, m_task_t task,
}
xbt_ex_free(e);
}
xbt_ex_free(e);
- /*
Decrement the refcount only on failu
re */
- t_simdata->
refcount--
;
+ /*
If the send failed, it is not used anymo
re */
+ t_simdata->
isused=0
;
}
process->simdata->waiting_task = NULL;
}
process->simdata->waiting_task = NULL;