mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
replay: avoid recursion when adding subscriptions
readAndAddSubscription uses nextDataMessage to find the first corresponding data and nextDataMessage calls readAndAddSubscription when it finds a new message definition.
This commit is contained in:
parent
38a794260c
commit
71d514d359
@ -721,10 +721,6 @@ Replay::nextDataMessage(std::ifstream &file, Subscription &subscription, int msg
|
||||
}
|
||||
|
||||
switch (message_header.msg_type) {
|
||||
case (int)ULogMessageType::ADD_LOGGED_MSG:
|
||||
readAndAddSubscription(file, message_header.msg_size);
|
||||
break;
|
||||
|
||||
case (int)ULogMessageType::DATA:
|
||||
file.read((char *)&file_msg_id, sizeof(file_msg_id));
|
||||
|
||||
@ -751,6 +747,7 @@ Replay::nextDataMessage(std::ifstream &file, Subscription &subscription, int msg
|
||||
break;
|
||||
|
||||
case (int)ULogMessageType::REMOVE_LOGGED_MSG: //skip these
|
||||
case (int)ULogMessageType::ADD_LOGGED_MSG:
|
||||
case (int)ULogMessageType::PARAMETER:
|
||||
case (int)ULogMessageType::DROPOUT:
|
||||
case (int)ULogMessageType::INFO:
|
||||
@ -907,19 +904,26 @@ Replay::run()
|
||||
ulog_message_header_s message_header;
|
||||
replay_file.seekg(_data_section_start);
|
||||
|
||||
//we know the next message must be an ADD_LOGGED_MSG
|
||||
ReadAndAndAddSubResult res;
|
||||
|
||||
do {
|
||||
while (true) {
|
||||
//we are in the Definition & Data Section Message Header section
|
||||
replay_file.read((char *)&message_header, ULOG_MSG_HEADER_LEN);
|
||||
res = readAndAddSubscription(replay_file, message_header.msg_size);
|
||||
|
||||
if (res == ReadAndAndAddSubResult::kFailure) {
|
||||
PX4_ERR("Failed to read subscription");
|
||||
return;
|
||||
if (!replay_file) {
|
||||
break;
|
||||
}
|
||||
|
||||
} while (res != ReadAndAndAddSubResult::kSuccess);
|
||||
if (message_header.msg_type == (int)ULogMessageType::ADD_LOGGED_MSG) {
|
||||
readAndAddSubscription(replay_file, message_header.msg_size);
|
||||
|
||||
} else if (message_header.msg_type == (int)ULogMessageType::DATA) {
|
||||
// End of Definition & Data Section Message Header section
|
||||
break;
|
||||
|
||||
} else {
|
||||
// Not important for now, skip
|
||||
replay_file.seekg(message_header.msg_size, ios::cur);
|
||||
}
|
||||
}
|
||||
|
||||
const uint64_t timestamp_offset = getTimestampOffset();
|
||||
uint32_t nr_published_messages = 0;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user