-/* Copyright (c) 2004-2016. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2017. The 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. */
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_gos, msg, "Logging specific to MSG (gos)");
+SG_BEGIN_DECL()
+
/** \ingroup msg_task_usage
* \brief Executes a task and waits for its termination.
*
TRACE_msg_task_execute_start(task);
- xbt_assert((!simdata->compute) && !task->simdata->isused, "This task is executed somewhere else. Go fix your code!");
+ xbt_assert((not simdata->compute) && not task->simdata->isused,
+ "This task is executed somewhere else. Go fix your code!");
XBT_DEBUG("Computing on %s", MSG_process_get_name(MSG_process_self()));
- if (simdata->flops_amount <= 0.0 && !simdata->host_nb) {
+ if (simdata->flops_amount <= 0.0 && not simdata->host_nb) {
TRACE_msg_task_execute_end(task);
return MSG_OK;
}
simcall_process_sleep(nb_sec);
}
catch(xbt_ex& e) {
- switch (e.category) {
- case cancel_error:
+ if (e.category == cancel_error) {
XBT_DEBUG("According to the JAVA API, a sleep call should only deal with HostFailureException, I'm lost.");
// adsein: MSG_TASK_CANCELED is assigned when someone kills the process that made the sleep, this is not
// correct. For instance, when the node is turned off, the error should be MSG_HOST_FAILURE, which is by the way
// and did not change anythings at the C level.
// See comment in the jmsg_process.c file, function JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_sleep(JNIEnv *env, jclass cls, jlong jmillis, jint jnanos)
status = MSG_TASK_CANCELED;
- break;
- default:
+ } else
throw;
- }
}
TRACE_msg_process_sleep_out(MSG_process_self());
/* Try to receive it by calling SIMIX network layer */
try {
- simcall_comm_recv(MSG_process_self(), mailbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, timeout, rate);
+ simcall_comm_recv(MSG_process_self()->getImpl(), mailbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, timeout, rate);
XBT_DEBUG("Got task %s from %s",(*task)->name,mailbox->name());
(*task)->simdata->setNotUsed();
+ SIMIX_comm_unref((*task)->simdata->comm);
}
catch (xbt_ex& e) {
switch (e.category) {
void *match_data, void_f_pvoid_t cleanup, int detached)
{
simdata_task_t t_simdata = nullptr;
- msg_process_t myself = SIMIX_process_self();
+ msg_process_t myself = MSG_process_self();
simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName(alias);
int call_end = TRACE_msg_task_put_start(task);
msg_global->sent_msg++;
/* Send it by calling SIMIX network layer */
- smx_activity_t act = simcall_comm_isend(myself, mailbox->getImpl(), t_simdata->bytes_amount, t_simdata->rate,
+ smx_activity_t act = simcall_comm_isend(myself->getImpl(), mailbox->getImpl(), t_simdata->bytes_amount, t_simdata->rate,
task, sizeof(void *), match_fun, cleanup, nullptr, match_data,detached);
t_simdata->comm = static_cast<simgrid::kernel::activity::Comm*>(act);
msg_comm_t comm = nullptr;
- if (! detached) {
+ if (not detached) {
comm = xbt_new0(s_msg_comm_t, 1);
comm->task_sent = task;
comm->task_received = nullptr;
comm->task_sent = nullptr;
comm->task_received = task;
comm->status = MSG_OK;
- comm->s_comm = simcall_comm_irecv(MSG_process_self(), mbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, rate);
+ comm->s_comm = simcall_comm_irecv(SIMIX_process_self(), mbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, rate);
return comm;
}
if (finished && comm->task_received != nullptr) {
/* I am the receiver */
(*comm->task_received)->simdata->setNotUsed();
+ SIMIX_comm_unref(comm->s_comm);
}
}
catch (xbt_ex& e) {
if (status == MSG_OK && comm->task_received != nullptr) {
/* I am the receiver */
(*comm->task_received)->simdata->setNotUsed();
+ SIMIX_comm_unref(comm->s_comm);
}
}
{
try {
simcall_comm_wait(comm->s_comm, timeout);
+ SIMIX_comm_unref(comm->s_comm);
if (comm->task_received != nullptr) {
/* I am the receiver */
if (comm->task_received != nullptr) {
/* I am the receiver */
(*comm->task_received)->simdata->setNotUsed();
+ SIMIX_comm_unref(comm->s_comm);
}
return finished_index;
// notify the user callback if any
if (msg_global->task_copy_callback) {
msg_task_t task = static_cast<msg_task_t>(buff);
- msg_global->task_copy_callback(task, comm->src_proc, comm->dst_proc);
+ msg_global->task_copy_callback(task, comm->src_proc->ciface(), comm->dst_proc->ciface());
}
}
msg_process_t process = MSG_process_self();
simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName(alias);
- int call_end = TRACE_msg_task_put_start(task); //must be after CHECK_HOST()
+ int call_end = TRACE_msg_task_put_start(task);
/* Prepare the task to send */
t_simdata = task->simdata;
simcall_set_category(comm, task->category);
t_simdata->comm = static_cast<simgrid::kernel::activity::Comm*>(comm);
simcall_comm_wait(comm, timeout);
+ SIMIX_comm_unref(comm);
}
catch (xbt_ex& e) {
switch (e.category) {
int MSG_task_listen(const char *alias)
{
simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(alias);
- return !mbox->empty() ||
- (mbox->getImpl()->permanent_receiver && !mbox->getImpl()->done_comm_queue.empty());
+ return mbox->listen() ? 1 : 0;
}
/** \ingroup msg_task_usage
simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(alias);
simgrid::kernel::activity::Comm* comm = static_cast<simgrid::kernel::activity::Comm*>(mbox->front());
- if (!comm)
+ if (not comm)
return -1;
return MSG_process_get_PID( static_cast<msg_task_t>(comm->src_data)->simdata->sender );
{
return task->category;
}
+
+SG_END_DECL()