示例#1
0
/** @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);
    }
}
示例#3
0
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();
}