/** \ingroup msg_task_usage * \brief Checks whether a communication is done, and if yes, finalizes it. * \param comm the communication to test * \return TRUE if the communication is finished * (but it may have failed, use MSG_comm_get_status() to know its status) * or FALSE if the communication is not finished yet * If the status is FALSE, don't forget to use MSG_process_sleep() after the test. */ int MSG_comm_test(msg_comm_t comm) { xbt_ex_t e; int finished = 0; TRY { finished = simcall_comm_test(comm->s_comm); if (finished && comm->task_received != NULL) { /* I am the receiver */ if (msg_global->debug_multiple_use && (*comm->task_received)->simdata->isused!=0) xbt_ex_free(*(xbt_ex_t*)(*comm->task_received)->simdata->isused); (*comm->task_received)->simdata->isused = 0; } } CATCH(e) { switch (e.category) { case network_error: comm->status = MSG_TRANSFER_FAILURE; finished = 1; break; case timeout_error: comm->status = MSG_TIMEOUT; finished = 1; break; default: RETHROW; } xbt_ex_free(e); } return finished; }
/** \ingroup msg_task_usage * \brief Checks whether a communication is done, and if yes, finalizes it. * \param comm the communication to test * \return TRUE if the communication is finished * (but it may have failed, use MSG_comm_get_status() to know its status) * or FALSE if the communication is not finished yet * If the status is FALSE, don't forget to use MSG_process_sleep() after the test. */ int MSG_comm_test(msg_comm_t comm) { int finished = 0; try { finished = simcall_comm_test(comm->s_comm); if (finished && comm->task_received != nullptr) { /* I am the receiver */ (*comm->task_received)->simdata->setNotUsed(); } } catch (xbt_ex& e) { switch (e.category) { case network_error: comm->status = MSG_TRANSFER_FAILURE; finished = 1; break; case timeout_error: comm->status = MSG_TIMEOUT; finished = 1; break; default: throw; } } return finished; }