diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 047918930..47c9472d5 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -17,6 +17,7 @@ Map::Map(View& view, FileSource& fileSource, MapMode mode) Map::~Map() { resume(); + context->invoke(&MapContext::cleanup); } void Map::pause() { diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index 47a6b3e4b..c349bdd15 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -36,6 +36,11 @@ MapContext::MapContext(uv_loop_t* loop, View& view_, FileSource& fileSource, Map } MapContext::~MapContext() { + // Make sure we call cleanup() before deleting this object. + assert(!style); +} + +void MapContext::cleanup() { view.notify(); // Explicit resets currently necessary because these abandon resources that need to be diff --git a/src/mbgl/map/map_context.hpp b/src/mbgl/map/map_context.hpp index 889443424..81e757c4c 100644 --- a/src/mbgl/map/map_context.hpp +++ b/src/mbgl/map/map_context.hpp @@ -54,6 +54,8 @@ public: void setSourceTileCacheSize(size_t size); void onLowMemory(); + void cleanup(); + // Style::Observer implementation. void onTileDataChanged() override; void onResourceLoadingFailed(std::exception_ptr error) override; diff --git a/test/miscellaneous/map_context.cpp b/test/miscellaneous/map_context.cpp index ed5192303..15061b122 100644 --- a/test/miscellaneous/map_context.cpp +++ b/test/miscellaneous/map_context.cpp @@ -19,4 +19,5 @@ TEST(MapContext, DoubleStyleLoad) { context.invokeSync(&MapContext::setStyleJSON, "", ""); context.invokeSync(&MapContext::setStyleJSON, "", ""); + context.invokeSync(&MapContext::cleanup); }