X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fbf96d959e4912fe445823b75cf102a0e89131e2..b8e92a8fe1dadd3c279b3a790995dd3a1c3f2c03:/src/msg/msg_gos.cpp diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index 865aa3e5e5..0abc0ce7b4 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -6,10 +6,10 @@ #include #include "src/simix/smx_private.h" /* MSG_task_listen looks inside the rdv directly. Not clean. */ +#include "msg_private.h" #include "mc/mc.h" #include "xbt/log.h" #include "xbt/sysdep.h" -#include "msg_private.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_gos, msg, "Logging specific to MSG (gos)"); @@ -29,7 +29,6 @@ msg_error_t MSG_task_execute(msg_task_t task) msg_error_t ret = MSG_parallel_task_execute(task); MSG_host_del_task(host, task); - return ret; } @@ -42,6 +41,11 @@ msg_error_t MSG_task_execute(msg_task_t task) * or #MSG_HOST_FAILURE otherwise */ msg_error_t MSG_parallel_task_execute(msg_task_t task) +{ + return MSG_parallel_task_execute_with_timeout(task, -1); +} + +msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeout) { simdata_task_t simdata = task->simdata; simdata_process_t p_simdata = static_cast(SIMIX_process_self_get_data()); @@ -63,10 +67,9 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task) simdata->setUsed(); if (simdata->host_nb > 0) { - simdata->compute = static_cast( - simcall_execution_parallel_start(task->name, simdata->host_nb,simdata->host_list, - simdata->flops_parallel_amount, simdata->bytes_parallel_amount, - 1.0, -1.0)); + simdata->compute = static_cast(simcall_execution_parallel_start( + task->name, simdata->host_nb, simdata->host_list, simdata->flops_parallel_amount, + simdata->bytes_parallel_amount, 1.0, -1.0, timeout)); XBT_DEBUG("Parallel execution action created: %p", simdata->compute); } else { simdata->compute = static_cast( @@ -89,6 +92,9 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task) case host_error: status = MSG_HOST_FAILURE; break; + case timeout_error: + status = MSG_TIMEOUT; + break; default: throw; } @@ -268,7 +274,7 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d /* 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); - XBT_DEBUG("Got task %s from %s",(*task)->name,mailbox->getName()); + XBT_DEBUG("Got task %s from %s",(*task)->name,mailbox->name()); (*task)->simdata->setNotUsed(); } catch (xbt_ex& e) { @@ -568,6 +574,14 @@ int MSG_comm_testany(xbt_dynar_t comms) */ void MSG_comm_destroy(msg_comm_t comm) { + /* Diagnose a possible user error: destroying a comm that is not done yet, and not detached either */ + if ((comm->s_comm->state == SIMIX_READY || comm->s_comm->state == SIMIX_RUNNING) + && (!static_cast(comm->s_comm)->detached)) + XBT_WARN("You are destroying a communication that is not done yet but %s. " + "This will lead to issues when the other side continues this communication. " + "Are you looking for MSG_task_dsend()?", + (comm->s_comm->state == SIMIX_READY ? "ready" : "running")); + xbt_free(comm); } @@ -943,8 +957,8 @@ xbt_dict_t MSG_as_router_get_properties(const char* asr) * \param asr the name of a router or AS * \param name a property name * \param value what to change the property to - * \param free_ctn the freeing function to use to kill the value on need */ -void MSG_as_router_set_property_value(const char* asr, const char *name, char *value,void_f_pvoid_t free_ctn) { - xbt_dict_set(MSG_as_router_get_properties(asr), name, value,free_ctn); +void MSG_as_router_set_property_value(const char* asr, const char* name, char* value) +{ + xbt_dict_set(MSG_as_router_get_properties(asr), name, value, nullptr); }