diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index 9dadd05d3..fa06a4267 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -50,6 +50,12 @@ MapContext::~MapContext() { void MapContext::cleanup() { view.notify(); + if (styleRequest) { + FileSource* fs = util::ThreadContext::getFileSource(); + fs->cancel(styleRequest); + styleRequest = nullptr; + } + // Explicit resets currently necessary because these abandon resources that need to be // cleaned up by glObjectStore.performCleanup(); style.reset(); @@ -85,6 +91,12 @@ void MapContext::triggerUpdate(const TransformState& state, const Update u) { } void MapContext::setStyleURL(const std::string& url) { + FileSource* fs = util::ThreadContext::getFileSource(); + + if (styleRequest) { + fs->cancel(styleRequest); + } + styleURL = url; styleJSON.clear(); @@ -94,8 +106,9 @@ void MapContext::setStyleURL(const std::string& url) { base = styleURL.substr(0, pos + 1); } - FileSource* fs = util::ThreadContext::getFileSource(); - fs->request({ Resource::Kind::Style, styleURL }, util::RunLoop::current.get()->get(), [this, base](const Response &res) { + styleRequest = fs->request({ Resource::Kind::Style, styleURL }, util::RunLoop::current.get()->get(), [this, base](const Response &res) { + styleRequest = nullptr; + if (res.status == Response::Successful) { loadStyleJSON(res.data, base); } else { diff --git a/src/mbgl/map/map_context.hpp b/src/mbgl/map/map_context.hpp index 715a55bf1..141a8ee96 100644 --- a/src/mbgl/map/map_context.hpp +++ b/src/mbgl/map/map_context.hpp @@ -92,6 +92,8 @@ private: std::string styleURL; std::string styleJSON; + Request* styleRequest = nullptr; + StillImageCallback callback; size_t sourceCacheSize; TransformState transformState;