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)
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
/* 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);
+ (*task)->simdata->comm = comm;
SIMIX_req_comm_destroy(comm);
DEBUG2("Got task %s from %p",(*task)->name,mailbox);
- (*task)->simdata->refcount--;
+ (*task)->simdata->isused=0;
}
CATCH(e) {
switch (e.category) {
MSG_error_t ret = MSG_OK;
simdata_task_t t_simdata = NULL;
m_process_t process = MSG_process_self();
+ smx_action_t comm;
#ifdef HAVE_TRACING
int call_end = 0;
#endif
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!");
- t_simdata->refcount++;
+ t_simdata->isused=1;
msg_global->sent_msg++;
process->simdata->waiting_task = 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 *), task);
+ comm = SIMIX_req_comm_isend(mailbox, t_simdata->message_size,
+ t_simdata->rate, task, sizeof(void *), NULL, NULL);
+ 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);
+ SIMIX_req_comm_destroy(comm);
}
CATCH(e) {
}
xbt_ex_free(e);
- /* Decrement the refcount only on failure */
- t_simdata->refcount--;
+ /* If the send failed, it is not used anymore */
+ t_simdata->isused=0;
}
process->simdata->waiting_task = NULL;