From 16fe8e64c4d47ac35fa6dd594342d3a265af358b Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 4 Dec 2014 15:10:27 -0800 Subject: [PATCH] Move setReachability to CachingHTTPFileSource --- include/mbgl/map/map.hpp | 3 --- .../mbgl/storage/caching_http_file_source.hpp | 3 ++- include/mbgl/storage/file_source.hpp | 1 - ios/mapbox-gl-cocoa | 2 +- macosx/main.mm | 4 ++-- src/mbgl/map/map.cpp | 9 --------- src/mbgl/storage/caching_http_file_source.cpp | 19 ++++++++++--------- 7 files changed, 15 insertions(+), 26 deletions(-) diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 3a50a7013..08f4ca564 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -122,9 +122,6 @@ public: void toggleDebug(); bool getDebug() const; - // Call this when the network reachability changed. - void setReachability(bool status); - inline const TransformState &getState() const { return state; } inline timestamp getTime() const { return animationTime; } diff --git a/include/mbgl/storage/caching_http_file_source.hpp b/include/mbgl/storage/caching_http_file_source.hpp index 08fd5b50c..403db3183 100644 --- a/include/mbgl/storage/caching_http_file_source.hpp +++ b/include/mbgl/storage/caching_http_file_source.hpp @@ -30,7 +30,8 @@ public: void prepare(std::function fn); - void retryAllPending(); + // Call this when the network status reachability changed. + void setReachability(bool reachable); private: std::thread::id thread_id; diff --git a/include/mbgl/storage/file_source.hpp b/include/mbgl/storage/file_source.hpp index accdc3c49..c8f621787 100644 --- a/include/mbgl/storage/file_source.hpp +++ b/include/mbgl/storage/file_source.hpp @@ -21,7 +21,6 @@ public: virtual void setBase(const std::string &value) = 0; virtual std::unique_ptr request(ResourceType type, const std::string &url) = 0; virtual void prepare(std::function fn) = 0; - virtual void retryAllPending() = 0; }; } diff --git a/ios/mapbox-gl-cocoa b/ios/mapbox-gl-cocoa index 7e16edebf..cf7436759 160000 --- a/ios/mapbox-gl-cocoa +++ b/ios/mapbox-gl-cocoa @@ -1 +1 @@ -Subproject commit 7e16edebf067c4195c98cb050f08ef85c690078f +Subproject commit cf7436759fb39a9a28ce13aa1ba897d2c884103e diff --git a/macosx/main.mm b/macosx/main.mm index 77305a325..ca1a21255 100644 --- a/macosx/main.mm +++ b/macosx/main.mm @@ -76,7 +76,7 @@ int main() { GLFWView view; mbgl::CachingHTTPFileSource fileSource(mbgl::platform::defaultCacheDatabase()); mbgl::Map map(view, fileSource); - mbgl::Map *map_ptr = ↦ + mbgl::CachingHTTPFileSource *fileSourcePtr = &fileSource; URLHandler *handler = [[URLHandler alloc] init]; [handler setMap:&map]; @@ -86,7 +86,7 @@ int main() { // Notify map object when network reachability status changes. Reachability* reachability = [Reachability reachabilityForInternetConnection]; reachability.reachableBlock = ^(Reachability *) { - map_ptr->setReachability(true); + fileSourcePtr->setReachability(true); }; [reachability startNotifier]; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 5be29d754..1a4528475 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -286,15 +286,6 @@ void Map::terminate() { painter->terminate(); } -void Map::setReachability(bool reachable) { - // Note: This function may be called from *any* thread. - if (reachable) { - fileSource.prepare([&]() { - fileSource.retryAllPending(); - }); - } -} - #pragma mark - Setup void Map::setup() { diff --git a/src/mbgl/storage/caching_http_file_source.cpp b/src/mbgl/storage/caching_http_file_source.cpp index 70254b68d..64582ba5d 100644 --- a/src/mbgl/storage/caching_http_file_source.cpp +++ b/src/mbgl/storage/caching_http_file_source.cpp @@ -100,16 +100,17 @@ void CachingHTTPFileSource::prepare(std::function fn) { } } -void CachingHTTPFileSource::retryAllPending() { - assert(thread_id == std::this_thread::get_id()); - - util::ptr req; - for (const std::pair> &pair : pending) { - if ((req = pair.second.lock())) { - req->retryImmediately(); - } +void CachingHTTPFileSource::setReachability(bool reachable) { + if (reachable && loop) { + prepare([this]() { + util::ptr req; + for (const std::pair> &pair : pending) { + if ((req = pair.second.lock())) { + req->retryImmediately(); + } + } + }); } - } }