include/o3tl/lru_map.hxx | 8 ++++++++ 1 file changed, 8 insertions(+) New commits: commit c27e92b29efe573e2cda9844e9ca38965f502443 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Mon Jun 3 16:07:40 2019 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Jun 3 19:19:08 2019 +0200
fix crash in lru_map/SalBitmap on shutdown When we shut down, we destroy the various caches, in the process of which SalBitmap calls back into it's owning cache, causing a SIGSEGV. Found while loading files from tdf#83426 Change-Id: I53db1621a0fdb75a8e66582662b0e2666499192b Reviewed-on: https://gerrit.libreoffice.org/73387 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/o3tl/lru_map.hxx b/include/o3tl/lru_map.hxx index 003da59551b5..54378a319ece 100644 --- a/include/o3tl/lru_map.hxx +++ b/include/o3tl/lru_map.hxx @@ -69,6 +69,14 @@ public: lru_map(size_t nMaxSize) : mMaxSize(nMaxSize ? nMaxSize : std::min(mLruMap.max_size(), mLruList.max_size())) {} + ~lru_map() + { + // Some code .e.g. SalBitmap likes to remove itself from a cache during it's destructor, which means we + // get calls into lru_map while we are in destruction, so use the swap-and-clear idiom to avoid those problems. + mLruMap.clear(); + list_t aLruListTemp; + aLruListTemp.swap(mLruList); + } void insert(key_value_pair_t& rPair) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits