/** @par Detailed Design: */ void Trick::MonteCarlo::check_timeouts() { struct timeval time_val; gettimeofday(&time_val, NULL); /** <ul><li> For every slave: */ for (std::vector<Trick::MonteSlave *>::size_type i = 0; i < slaves.size(); ++i) { /** <ul><li> If the slave has timed out: */ if ((slaves[i]->state == MonteSlave::RUNNING || slaves[i]->state == MonteSlave::STOPPING) && (time_val.tv_sec + (double)time_val.tv_usec / 1000000 - slaves[i]->current_run->start_time) * slaves[i]->multiplier > timeout) { /** * <ul><li> This run might have been redispatched due to a previous timeout for which the slave actually returned * data later. Only process this timeout if the run hasn't been resolved yet. */ if (slaves[i]->current_run->exit_status == MonteRun::INCOMPLETE) { if (verbosity >= ERROR) { message_publish(MSG_ERROR, "Monte [Master] %s:%d has not responded for run %d.\n", slaves[i]->machine_name.c_str(), slaves[i]->id, slaves[i]->current_run->id) ; } handle_retry(*slaves[i], MonteRun::TIMEDOUT); } /** </ul><li> Update the slave's state. */ slaves[i]->state = slaves[i]->state == MonteSlave::RUNNING ? MonteSlave::UNRESPONSIVE_RUNNING : MonteSlave::UNRESPONSIVE_STOPPING; } } }
void DataFlash_MAVLink::remote_log_block_status_msg(mavlink_channel_t chan, mavlink_message_t* msg) { mavlink_remote_log_block_status_t packet; mavlink_msg_remote_log_block_status_decode(msg, &packet); if(packet.status == 0){ handle_retry(packet.seqno); } else{ handle_ack(chan, msg, packet.seqno); } }
void DataFlash_MAVLink::remote_log_block_status_msg(mavlink_channel_t chan, mavlink_message_t* msg) { mavlink_remote_log_block_status_t packet; mavlink_msg_remote_log_block_status_decode(msg, &packet); if (!semaphore->take_nonblocking()) { return; } if(packet.status == 0){ handle_retry(packet.seqno); } else{ handle_ack(chan, msg, packet.seqno); } semaphore->give(); }