[core] Reset observers of removed Sources and Layers

This ensures that the observer is not an invalid reference if the removed Source/Layer is retained, but the Style is deallocated.
This commit is contained in:
John Firebaugh
2017-05-04 15:40:17 -07:00
parent 54b7684baa
commit dd353a60d1
3 changed files with 4 additions and 2 deletions

View File

@@ -12,7 +12,7 @@ std::unique_ptr<Layer> Layer::Impl::copy(const std::string& id_,
}
void Layer::Impl::setObserver(LayerObserver* observer_) {
observer = observer_;
observer = observer_ ? observer_ : &nullObserver;
}
} // namespace style

View File

@@ -20,7 +20,7 @@ void Source::Impl::dumpDebugLogs() const {
}
void Source::Impl::setObserver(SourceObserver* observer_) {
observer = observer_;
observer = observer_ ? observer_ : &nullObserver;
}
} // namespace style

View File

@@ -192,6 +192,7 @@ std::unique_ptr<Source> Style::removeSource(const std::string& id) {
});
auto source = std::move(*it);
source->baseImpl->setObserver(nullptr);
sources.erase(it);
updateBatch.sourceIDs.erase(id);
@@ -264,6 +265,7 @@ std::unique_ptr<Layer> Style::removeLayer(const std::string& id) {
customLayer->impl->deinitialize();
}
layer->baseImpl->setObserver(nullptr);
layers.erase(it);
removeRenderLayer(id);
return layer;