[Libreoffice-commits] core.git: sc/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Fri May 31 18:26:51 UTC 2019


 sc/source/core/data/table1.cxx |    4 ++++
 1 file changed, 4 insertions(+)

New commits:
commit dc73583573a31078c8408e820d749aaeab25bc32
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Fri May 31 15:39:17 2019 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri May 31 20:26:01 2019 +0200

    crash-testing fdo86059-1.xlsx
    
    blind fix since I can't reproduce. But I can see from the reported
    threads that two different threads are entering SfxItemPool::Put and
    consequently the debug runtime throws an iterator exception.
    
    Change-Id: Idaa6a93b134edc49bda8cd7876bb216d5aec7037
    Reviewed-on: https://gerrit.libreoffice.org/73272
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index be7d12b50150..b899bbb91cbf 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -2554,6 +2554,10 @@ ScColumnsRange ScTable::GetColumnsRange(SCCOL nColBegin, SCCOL nColEnd) const
 // out-of-line the cold part of the CreateColumnIfNotExists function
 void ScTable::CreateColumnIfNotExistsImpl( const SCCOL nScCol ) const
 {
+    // When doing multi-threaded load of, e.g. XLS files, we can hit this, which calls
+    // into SfxItemPool::Put, in parallel with other code that calls into SfxItemPool::Put,
+    // which is bad since that code is not thread-safe.
+    SolarMutexGuard aGuard;
     const SCCOL aOldColSize = aCol.size();
     aCol.resize( static_cast< size_t >( nScCol + 1 ) );
     for (SCCOL i = aOldColSize; i <= nScCol; i++)


More information about the Libreoffice-commits mailing list