summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLeith Bade <leith@mapbox.com>2015-10-06 13:40:34 +1100
committerLeith Bade <leith@mapbox.com>2015-10-06 14:10:32 +1100
commitb869771992e2210f8c95f297074b8289a070c183 (patch)
treefc6e70e3e7fa967776e6f064ee81e48205f38fa9 /src
parent150ce3b0cac9e70c319ff0aeb109fb596508920a (diff)
downloadqtlocation-mapboxgl-b869771992e2210f8c95f297074b8289a070c183.tar.gz
Correctly handle spurious wake-ups in Map::pause()
Fixes #2522
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/map.cpp11
-rw-r--r--src/mbgl/map/map_context.cpp5
-rw-r--r--src/mbgl/map/map_data.hpp4
3 files changed, 10 insertions, 10 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 50819f66a7..5fd0638387 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -32,21 +32,20 @@ Map::~Map() {
void Map::pause() {
assert(data->mode == MapMode::Continuous);
- if (!paused) {
+ if (!data->paused) {
std::unique_lock<std::mutex> lockPause(data->mutexPause);
context->invoke(&MapContext::pause);
- data->condPaused.wait(lockPause);
- paused = true;
+ data->condPause.wait(lockPause, [&]{ return data->paused; });
}
}
bool Map::isPaused() {
- return paused;
+ return data->paused;
}
void Map::resume() {
- data->condResume.notify_all();
- paused = false;
+ data->paused = false;
+ data->condPause.notify_all();
}
void Map::renderStill(StillImageCallback callback) {
diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp
index c2b5900b16..662bff0e45 100644
--- a/src/mbgl/map/map_context.cpp
+++ b/src/mbgl/map/map_context.cpp
@@ -75,8 +75,9 @@ void MapContext::pause() {
view.deactivate();
std::unique_lock<std::mutex> lockPause(data.mutexPause);
- data.condPaused.notify_all();
- data.condResume.wait(lockPause);
+ data.paused = true;
+ data.condPause.notify_all();
+ data.condPause.wait(lockPause, [&]{ return !data.paused; });
view.activate();
diff --git a/src/mbgl/map/map_data.hpp b/src/mbgl/map/map_data.hpp
index 9cc76e8b82..5d9e79fecc 100644
--- a/src/mbgl/map/map_data.hpp
+++ b/src/mbgl/map/map_data.hpp
@@ -127,9 +127,9 @@ private:
// TODO: make private
public:
+ bool paused = false;
std::mutex mutexPause;
- std::condition_variable condPaused;
- std::condition_variable condResume;
+ std::condition_variable condPause;
};
}