[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:
@@ -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
|
||||
|
||||
@@ -20,7 +20,7 @@ void Source::Impl::dumpDebugLogs() const {
|
||||
}
|
||||
|
||||
void Source::Impl::setObserver(SourceObserver* observer_) {
|
||||
observer = observer_;
|
||||
observer = observer_ ? observer_ : &nullObserver;
|
||||
}
|
||||
|
||||
} // namespace style
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user