提交 29afd5ed 编写于 作者: G gruminions 提交者: Dengchengliang

framework: defer creation of participant to solve random crash problem in ut case

上级 1dea504f
......@@ -15,12 +15,19 @@
*****************************************************************************/
#include "cybertron/transport/transport.h"
#include <mutex>
#include "cybertron/common/global_data.h"
namespace apollo {
namespace cybertron {
namespace transport {
static std::mutex participant_mutex_;
ParticipantPtr Transport::participant_ = nullptr;
Transport::Transport() {}
Transport::~Transport() {}
......@@ -32,7 +39,16 @@ ParticipantPtr Transport::CreateParticipant() {
return std::make_shared<Participant>(participant_name, 11512);
}
ParticipantPtr Transport::participant_ = CreateParticipant();
ParticipantPtr Transport::participant() {
if (participant_ != nullptr) {
return participant_;
}
std::lock_guard<std::mutex> lck(participant_mutex_);
if (participant_ == nullptr) {
participant_ = CreateParticipant();
}
return participant_;
}
} // namespace transport
} // namespace cybertron
......
......@@ -57,7 +57,7 @@ class Transport {
const OptionalMode& mode = OptionalMode::HYBRID) ->
typename std::shared_ptr<LowerReach<MessageT>>;
static ParticipantPtr participant() { return participant_; }
static ParticipantPtr participant();
private:
static ParticipantPtr CreateParticipant();
......@@ -86,12 +86,12 @@ auto Transport::CreateUpperReach(const RoleAttributes& attr,
case OptionalMode::RTPS:
upper_reach = std::make_shared<RtpsUpperReach<MessageT>>(modified_attr,
participant_);
participant());
break;
default:
upper_reach = std::make_shared<HybridUpperReach<MessageT>>(modified_attr,
participant_);
participant());
break;
}
......@@ -132,7 +132,7 @@ auto Transport::CreateLowerReach(
default:
lower_reach = std::make_shared<HybridLowerReach<MessageT>>(
modified_attr, msg_listener, participant_);
modified_attr, msg_listener, participant());
break;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册