sc/source/core/data/dptablecache.cxx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
New commits: commit 54731b6a25ea7f049a866e9a3c78d0684f7e1bc4 Author: Kohei Yoshida <[email protected]> Date: Fri Jan 13 11:56:35 2012 -0500 Use a copy; the container gets modified during iteration. diff --git a/sc/source/core/data/dptablecache.cxx b/sc/source/core/data/dptablecache.cxx index 1baec31..a65785b 100644 --- a/sc/source/core/data/dptablecache.cxx +++ b/sc/source/core/data/dptablecache.cxx @@ -447,8 +447,11 @@ struct ClearObjectSource : std::unary_function<ScDPObject*, void> ScDPCache::~ScDPCache() { - // Make sure no live ScDPObject instances hold reference to this cache any more. - std::for_each(maRefObjects.begin(), maRefObjects.end(), ClearObjectSource()); + // Make sure no live ScDPObject instances hold reference to this cache any + // more. We need to use a copied set because the referencing objects will + // modify the original when clearing their source. + ObjectSetType aRefs(maRefObjects); + std::for_each(aRefs.begin(), aRefs.end(), ClearObjectSource()); } bool ScDPCache::IsValid() const commit 405cd1b404faaed034b1188806a0f7f3ff899664 Author: Kohei Yoshida <[email protected]> Date: Fri Jan 13 10:52:56 2012 -0500 Make sure no live ScDPObject instances hold reference to the deleted cache. diff --git a/sc/source/core/data/dptablecache.cxx b/sc/source/core/data/dptablecache.cxx index 57f6ce1..1baec31 100644 --- a/sc/source/core/data/dptablecache.cxx +++ b/sc/source/core/data/dptablecache.cxx @@ -433,8 +433,22 @@ ScDPCache::ScDPCache(ScDocument* pDoc) : { } +namespace { + +struct ClearObjectSource : std::unary_function<ScDPObject*, void> +{ + void operator() (ScDPObject* p) const + { + p->ClearSource(); + } +}; + +} + ScDPCache::~ScDPCache() { + // Make sure no live ScDPObject instances hold reference to this cache any more. + std::for_each(maRefObjects.begin(), maRefObjects.end(), ClearObjectSource()); } bool ScDPCache::IsValid() const _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
