Skip to content

Commit 8abc277

Browse files
committed
fix deadlock
1 parent 696a27b commit 8abc277

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/decorators/skip_unless_updated.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ NodeStatus SkipUnlessUpdated::tick()
4040
return status;
4141
}
4242

43-
auto entry = config().blackboard->getEntry(entry_key_);
44-
std::unique_lock lk(entry->entry_mutex);
45-
auto seq = static_cast<int64_t>(entry->sequence_id);
46-
if(seq == sequence_id_)
4743
{
48-
return NodeStatus::SKIPPED;
44+
auto entry = config().blackboard->getEntry(entry_key_);
45+
std::unique_lock lk(entry->entry_mutex);
46+
auto seq = static_cast<int64_t>(entry->sequence_id);
47+
if(seq == sequence_id_)
48+
{
49+
return NodeStatus::SKIPPED;
50+
}
51+
sequence_id_ = seq;
4952
}
50-
sequence_id_ = seq;
5153

5254
auto status = child()->executeTick();
5355
still_executing_child_ = (status == NodeStatus::RUNNING);

src/decorators/wait_update.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ NodeStatus WaitValueUpdate::tick()
4040
return status;
4141
}
4242

43-
auto entry = config().blackboard->getEntry(entry_key_);
44-
std::unique_lock lk(entry->entry_mutex);
45-
auto seq = static_cast<int64_t>(entry->sequence_id);
46-
if(seq == sequence_id_)
4743
{
48-
return NodeStatus::RUNNING;
44+
auto entry = config().blackboard->getEntry(entry_key_);
45+
std::unique_lock lk(entry->entry_mutex);
46+
auto seq = static_cast<int64_t>(entry->sequence_id);
47+
if(seq == sequence_id_)
48+
{
49+
return NodeStatus::SKIPPED;
50+
}
51+
sequence_id_ = seq;
4952
}
50-
sequence_id_ = seq;
5153

5254
auto status = child()->executeTick();
5355
still_executing_child_ = (status == NodeStatus::RUNNING);

0 commit comments

Comments
 (0)