X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5180ef8a951643b07bf2d6f8b8f13138fff7389b..341cb255f174254622d3ab6c52dd6d3256b46465:/src/msg/msg_gos.cpp diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index 288732a375..8e921e334c 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -1,4 +1,4 @@ -/* 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. */ @@ -52,11 +52,12 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo 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; } @@ -122,8 +123,7 @@ msg_error_t MSG_process_sleep(double nb_sec) 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 @@ -132,10 +132,8 @@ msg_error_t MSG_process_sleep(double nb_sec) // 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()); @@ -272,6 +270,7 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d 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) { @@ -320,7 +319,7 @@ static inline msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *al t_simdata->comm = static_cast(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; @@ -491,6 +490,7 @@ int MSG_comm_test(msg_comm_t 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) { @@ -558,6 +558,7 @@ int MSG_comm_testany(xbt_dynar_t comms) if (status == MSG_OK && comm->task_received != nullptr) { /* I am the receiver */ (*comm->task_received)->simdata->setNotUsed(); + SIMIX_comm_unref(comm->s_comm); } } @@ -586,6 +587,7 @@ msg_error_t MSG_comm_wait(msg_comm_t comm, double timeout) { try { simcall_comm_wait(comm->s_comm, timeout); + SIMIX_comm_unref(comm->s_comm); if (comm->task_received != nullptr) { /* I am the receiver */ @@ -670,6 +672,7 @@ int MSG_comm_waitany(xbt_dynar_t comms) if (comm->task_received != nullptr) { /* I am the receiver */ (*comm->task_received)->simdata->setNotUsed(); + SIMIX_comm_unref(comm->s_comm); } return finished_index; @@ -776,7 +779,7 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl 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; @@ -797,6 +800,7 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl simcall_set_category(comm, task->category); t_simdata->comm = static_cast(comm); simcall_comm_wait(comm, timeout); + SIMIX_comm_unref(comm); } catch (xbt_ex& e) { switch (e.category) { @@ -851,8 +855,7 @@ msg_error_t MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alia 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 @@ -868,7 +871,7 @@ int MSG_task_listen_from(const char *alias) simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(alias); simgrid::kernel::activity::Comm* comm = static_cast(mbox->front()); - if (!comm) + if (not comm) return -1; return MSG_process_get_PID( static_cast(comm->src_data)->simdata->sender );