diff options
author | Leith Bade <leith@mapbox.com> | 2015-10-06 13:40:34 +1100 |
---|---|---|
committer | Leith Bade <leith@mapbox.com> | 2015-10-06 14:10:32 +1100 |
commit | b869771992e2210f8c95f297074b8289a070c183 (patch) | |
tree | fc6e70e3e7fa967776e6f064ee81e48205f38fa9 /src | |
parent | 150ce3b0cac9e70c319ff0aeb109fb596508920a (diff) | |
download | qtlocation-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.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/map/map_context.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/map/map_data.hpp | 4 |
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; }; } |