Skip to content

Commit 75c38b0

Browse files
authored
Merge branch 'master' into introduce-rangefinderpoint
2 parents c8f48fb + 8d5bf2a commit 75c38b0

23 files changed

+439
-449
lines changed

cartographer/cloud/internal/map_builder_server.cc

+7-7
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ void MapBuilderServer::OnLocalSlamResult(
200200
->EnqueueSensorData(std::move(sensor_data));
201201
}
202202

203-
common::MutexLocker locker(&subscriptions_lock_);
203+
absl::MutexLock locker(&subscriptions_lock_);
204204
for (auto& entry : local_slam_subscriptions_[trajectory_id]) {
205205
auto copy_of_insertion_result =
206206
insertion_result
@@ -224,7 +224,7 @@ void MapBuilderServer::OnLocalSlamResult(
224224
void MapBuilderServer::OnGlobalSlamOptimizations(
225225
const std::map<int, mapping::SubmapId>& last_optimized_submap_ids,
226226
const std::map<int, mapping::NodeId>& last_optimized_node_ids) {
227-
common::MutexLocker locker(&subscriptions_lock_);
227+
absl::MutexLock locker(&subscriptions_lock_);
228228
for (auto& entry : global_slam_subscriptions_) {
229229
if (!entry.second(last_optimized_submap_ids, last_optimized_node_ids)) {
230230
LOG(INFO) << "Removing subscription with index: " << entry.first;
@@ -237,7 +237,7 @@ MapBuilderContextInterface::LocalSlamSubscriptionId
237237
MapBuilderServer::SubscribeLocalSlamResults(
238238
int trajectory_id,
239239
MapBuilderContextInterface::LocalSlamSubscriptionCallback callback) {
240-
common::MutexLocker locker(&subscriptions_lock_);
240+
absl::MutexLock locker(&subscriptions_lock_);
241241
local_slam_subscriptions_[trajectory_id].emplace(current_subscription_index_,
242242
callback);
243243
return MapBuilderContextInterface::LocalSlamSubscriptionId{
@@ -247,27 +247,27 @@ MapBuilderServer::SubscribeLocalSlamResults(
247247
void MapBuilderServer::UnsubscribeLocalSlamResults(
248248
const MapBuilderContextInterface::LocalSlamSubscriptionId&
249249
subscription_id) {
250-
common::MutexLocker locker(&subscriptions_lock_);
250+
absl::MutexLock locker(&subscriptions_lock_);
251251
CHECK_EQ(local_slam_subscriptions_[subscription_id.trajectory_id].erase(
252252
subscription_id.subscription_index),
253253
1u);
254254
}
255255

256256
int MapBuilderServer::SubscribeGlobalSlamOptimizations(
257257
MapBuilderContextInterface::GlobalSlamOptimizationCallback callback) {
258-
common::MutexLocker locker(&subscriptions_lock_);
258+
absl::MutexLock locker(&subscriptions_lock_);
259259
global_slam_subscriptions_.emplace(current_subscription_index_, callback);
260260
return current_subscription_index_++;
261261
}
262262

263263
void MapBuilderServer::UnsubscribeGlobalSlamOptimizations(
264264
int subscription_index) {
265-
common::MutexLocker locker(&subscriptions_lock_);
265+
absl::MutexLock locker(&subscriptions_lock_);
266266
CHECK_EQ(global_slam_subscriptions_.erase(subscription_index), 1u);
267267
}
268268

269269
void MapBuilderServer::NotifyFinishTrajectory(int trajectory_id) {
270-
common::MutexLocker locker(&subscriptions_lock_);
270+
absl::MutexLock locker(&subscriptions_lock_);
271271
for (auto& entry : local_slam_subscriptions_[trajectory_id]) {
272272
MapBuilderContextInterface::LocalSlamSubscriptionCallback callback =
273273
entry.second;

cartographer/cloud/internal/map_builder_server.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ class MapBuilderServer : public MapBuilderServerInterface {
135135
std::unique_ptr<mapping::MapBuilderInterface> map_builder_;
136136
common::BlockingQueue<std::unique_ptr<MapBuilderContextInterface::Data>>
137137
incoming_data_queue_;
138-
common::Mutex subscriptions_lock_;
138+
absl::Mutex subscriptions_lock_;
139139
int current_subscription_index_ = 0;
140140
std::map<int /* trajectory ID */, LocalSlamResultHandlerSubscriptions>
141141
local_slam_subscriptions_ GUARDED_BY(subscriptions_lock_);

cartographer/common/blocking_queue.h

+41-24
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#include <deque>
2222
#include <memory>
2323

24-
#include "cartographer/common/mutex.h"
24+
#include "absl/synchronization/mutex.h"
2525
#include "cartographer/common/port.h"
2626
#include "cartographer/common/time.h"
2727
#include "glog/logging.h"
@@ -47,17 +47,22 @@ class BlockingQueue {
4747

4848
// Pushes a value onto the queue. Blocks if the queue is full.
4949
void Push(T t) {
50-
MutexLocker lock(&mutex_);
51-
lock.Await([this]() REQUIRES(mutex_) { return QueueNotFullCondition(); });
50+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
51+
return QueueNotFullCondition();
52+
};
53+
absl::MutexLock lock(&mutex_);
54+
mutex_.Await(absl::Condition(&predicate));
5255
deque_.push_back(std::move(t));
5356
}
5457

5558
// Like push, but returns false if 'timeout' is reached.
5659
bool PushWithTimeout(T t, const common::Duration timeout) {
57-
MutexLocker lock(&mutex_);
58-
if (!lock.AwaitWithTimeout(
59-
[this]() REQUIRES(mutex_) { return QueueNotFullCondition(); },
60-
timeout)) {
60+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
61+
return QueueNotFullCondition();
62+
};
63+
absl::MutexLock lock(&mutex_);
64+
if (!mutex_.AwaitWithTimeout(absl::Condition(&predicate),
65+
absl::FromChrono(timeout))) {
6166
return false;
6267
}
6368
deque_.push_back(std::move(t));
@@ -66,8 +71,11 @@ class BlockingQueue {
6671

6772
// Pops the next value from the queue. Blocks until a value is available.
6873
T Pop() {
69-
MutexLocker lock(&mutex_);
70-
lock.Await([this]() REQUIRES(mutex_) { return !QueueEmptyCondition(); });
74+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
75+
return !QueueEmptyCondition();
76+
};
77+
absl::MutexLock lock(&mutex_);
78+
mutex_.Await(absl::Condition(&predicate));
7179

7280
T t = std::move(deque_.front());
7381
deque_.pop_front();
@@ -76,10 +84,12 @@ class BlockingQueue {
7684

7785
// Like Pop, but can timeout. Returns nullptr in this case.
7886
T PopWithTimeout(const common::Duration timeout) {
79-
MutexLocker lock(&mutex_);
80-
if (!lock.AwaitWithTimeout(
81-
[this]() REQUIRES(mutex_) { return !QueueEmptyCondition(); },
82-
timeout)) {
87+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
88+
return !QueueEmptyCondition();
89+
};
90+
absl::MutexLock lock(&mutex_);
91+
if (!mutex_.AwaitWithTimeout(absl::Condition(&predicate),
92+
absl::FromChrono(timeout))) {
8393
return nullptr;
8494
}
8595
T t = std::move(deque_.front());
@@ -90,10 +100,12 @@ class BlockingQueue {
90100
// Like Peek, but can timeout. Returns nullptr in this case.
91101
template <typename R>
92102
R* PeekWithTimeout(const common::Duration timeout) {
93-
MutexLocker lock(&mutex_);
94-
if (!lock.AwaitWithTimeout(
95-
[this]() REQUIRES(mutex_) { return !QueueEmptyCondition(); },
96-
timeout)) {
103+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
104+
return !QueueEmptyCondition();
105+
};
106+
absl::MutexLock lock(&mutex_);
107+
if (!mutex_.AwaitWithTimeout(absl::Condition(&predicate),
108+
absl::FromChrono(timeout))) {
97109
return nullptr;
98110
}
99111
return deque_.front().get();
@@ -104,7 +116,7 @@ class BlockingQueue {
104116
// a pointer to the given type R.
105117
template <typename R>
106118
const R* Peek() {
107-
MutexLocker lock(&mutex_);
119+
absl::MutexLock lock(&mutex_);
108120
if (deque_.empty()) {
109121
return nullptr;
110122
}
@@ -113,26 +125,31 @@ class BlockingQueue {
113125

114126
// Returns the number of items currently in the queue.
115127
size_t Size() {
116-
MutexLocker lock(&mutex_);
128+
absl::MutexLock lock(&mutex_);
117129
return deque_.size();
118130
}
119131

120132
// Blocks until the queue is empty.
121133
void WaitUntilEmpty() {
122-
MutexLocker lock(&mutex_);
123-
lock.Await([this]() REQUIRES(mutex_) { return QueueEmptyCondition(); });
134+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
135+
return QueueEmptyCondition();
136+
};
137+
absl::MutexLock lock(&mutex_);
138+
mutex_.Await(absl::Condition(&predicate));
124139
}
125140

126141
private:
127142
// Returns true iff the queue is empty.
128-
bool QueueEmptyCondition() REQUIRES(mutex_) { return deque_.empty(); }
143+
bool QueueEmptyCondition() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
144+
return deque_.empty();
145+
}
129146

130147
// Returns true iff the queue is not full.
131-
bool QueueNotFullCondition() REQUIRES(mutex_) {
148+
bool QueueNotFullCondition() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
132149
return queue_size_ == kInfiniteQueueSize || deque_.size() < queue_size_;
133150
}
134151

135-
Mutex mutex_;
152+
absl::Mutex mutex_;
136153
const size_t queue_size_ GUARDED_BY(mutex_);
137154
std::deque<T> deque_ GUARDED_BY(mutex_);
138155
};

cartographer/common/internal/testing/thread_pool_for_testing.cc

+14-11
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ThreadPoolForTesting::ThreadPoolForTesting()
3535

3636
ThreadPoolForTesting::~ThreadPoolForTesting() {
3737
{
38-
MutexLocker locker(&mutex_);
38+
absl::MutexLock locker(&mutex_);
3939
CHECK(running_);
4040
running_ = false;
4141
CHECK_EQ(task_queue_.size(), 0);
@@ -45,7 +45,7 @@ ThreadPoolForTesting::~ThreadPoolForTesting() {
4545
}
4646

4747
void ThreadPoolForTesting::NotifyDependenciesCompleted(Task* task) {
48-
MutexLocker locker(&mutex_);
48+
absl::MutexLock locker(&mutex_);
4949
CHECK(running_);
5050
auto it = tasks_not_ready_.find(task);
5151
CHECK(it != tasks_not_ready_.end());
@@ -56,7 +56,7 @@ void ThreadPoolForTesting::NotifyDependenciesCompleted(Task* task) {
5656
std::weak_ptr<Task> ThreadPoolForTesting::Schedule(std::unique_ptr<Task> task) {
5757
std::shared_ptr<Task> shared_task;
5858
{
59-
MutexLocker locker(&mutex_);
59+
absl::MutexLock locker(&mutex_);
6060
idle_ = false;
6161
CHECK(running_);
6262
auto insert_result =
@@ -69,26 +69,29 @@ std::weak_ptr<Task> ThreadPoolForTesting::Schedule(std::unique_ptr<Task> task) {
6969
}
7070

7171
void ThreadPoolForTesting::WaitUntilIdle() {
72+
const auto predicate = [this]()
73+
EXCLUSIVE_LOCKS_REQUIRED(mutex_) { return idle_; };
7274
for (;;) {
7375
{
74-
common::MutexLocker locker(&mutex_);
75-
if (locker.AwaitWithTimeout([this]() REQUIRES(mutex_) { return idle_; },
76-
common::FromSeconds(0.1))) {
76+
absl::MutexLock locker(&mutex_);
77+
if (mutex_.AwaitWithTimeout(absl::Condition(&predicate),
78+
absl::FromChrono(common::FromSeconds(0.1)))) {
7779
return;
7880
}
7981
}
8082
}
8183
}
8284

8385
void ThreadPoolForTesting::DoWork() {
86+
const auto predicate = [this]() EXCLUSIVE_LOCKS_REQUIRED(mutex_) {
87+
return !task_queue_.empty() || !running_;
88+
};
8489
for (;;) {
8590
std::shared_ptr<Task> task;
8691
{
87-
MutexLocker locker(&mutex_);
88-
locker.AwaitWithTimeout(
89-
[this]()
90-
REQUIRES(mutex_) { return !task_queue_.empty() || !running_; },
91-
common::FromSeconds(0.1));
92+
absl::MutexLock locker(&mutex_);
93+
mutex_.AwaitWithTimeout(absl::Condition(&predicate),
94+
absl::FromChrono(common::FromSeconds(0.1)));
9295
if (!task_queue_.empty()) {
9396
task = task_queue_.front();
9497
task_queue_.pop_front();

cartographer/common/internal/testing/thread_pool_for_testing.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include <map>
2323
#include <thread>
2424

25-
#include "cartographer/common/mutex.h"
25+
#include "absl/synchronization/mutex.h"
2626
#include "cartographer/common/thread_pool.h"
2727

2828
namespace cartographer {
@@ -35,7 +35,7 @@ class ThreadPoolForTesting : public ThreadPoolInterface {
3535
~ThreadPoolForTesting();
3636

3737
std::weak_ptr<Task> Schedule(std::unique_ptr<Task> task)
38-
EXCLUDES(mutex_) override;
38+
LOCKS_EXCLUDED(mutex_) override;
3939

4040
void WaitUntilIdle();
4141

@@ -44,9 +44,9 @@ class ThreadPoolForTesting : public ThreadPoolInterface {
4444

4545
void DoWork();
4646

47-
void NotifyDependenciesCompleted(Task* task) EXCLUDES(mutex_) override;
47+
void NotifyDependenciesCompleted(Task* task) LOCKS_EXCLUDED(mutex_) override;
4848

49-
Mutex mutex_;
49+
absl::Mutex mutex_;
5050
bool running_ GUARDED_BY(mutex_) = true;
5151
bool idle_ GUARDED_BY(mutex_) = true;
5252
std::deque<std::shared_ptr<Task>> task_queue_ GUARDED_BY(mutex_);

cartographer/common/mutex.h

-67
This file was deleted.

0 commit comments

Comments
 (0)