Skip to content

Commit

Permalink
Merge pull request microsoft#849 from tachitachi/master
Browse files Browse the repository at this point in the history
Fixing a race condition in MultiRotorConnector with reset()
sytelus authored Feb 27, 2018
2 parents 702d9ea + 4144aba commit 67eaab0
Showing 2 changed files with 13 additions and 2 deletions.
14 changes: 12 additions & 2 deletions Unreal/Plugins/AirSim/Source/Multirotor/MultiRotorConnector.cpp
Original file line number Diff line number Diff line change
@@ -54,6 +54,7 @@ MultiRotorConnector::MultiRotorConnector(VehiclePawnWrapper* vehicle_pawn_wrappe
last_pose_ = pending_pose_ = last_debug_pose_ = Pose::nanPose();
pending_pose_status_ = PendingPoseStatus::NonePending;
reset_pending_ = false;
did_reset_ = false;

std::string message;
if (!vehicle_.getController()->isAvailable(message)) {
@@ -146,6 +147,7 @@ void MultiRotorConnector::updateRenderedState(float dt)
//if reset is pending then do it first, no need to do other things until next tick
if (reset_pending_) {
reset_task_();
did_reset_ = true;
return;
}

@@ -200,8 +202,15 @@ void MultiRotorConnector::updateRendering(float dt)
{
//if we did reset then don't worry about synchrnozing states for this tick
if (reset_pending_) {
reset_pending_ = false;
return;
// Continue to wait for reset
if (!did_reset_) {
return;
}
else {
reset_pending_ = false;
did_reset_ = false;
return;
}
}

try {
@@ -363,6 +372,7 @@ void MultiRotorConnector::reset()
reset_task_ = std::packaged_task<void()>([this]() { resetPrivate(); });
std::future<void> reset_result = reset_task_.get_future();
reset_pending_ = true;
did_reset_ = false;
reset_result.wait();
}
}
Original file line number Diff line number Diff line change
@@ -113,6 +113,7 @@ class MultiRotorConnector : public msr::airlib::VehicleConnectorBase

//reset must happen while World is locked so its async task initiated from API thread
bool reset_pending_;
bool did_reset_;
std::packaged_task<void()> reset_task_;

Pose last_pose_; //for trace lines showing vehicle path

0 comments on commit 67eaab0

Please sign in to comment.