diff options
author | Eike Rathke <erack@redhat.com> | 2015-09-16 12:38:06 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-09-16 12:44:26 +0200 |
commit | e4a8ae0bf54476e9a0c9e1f5348c05f3cd838899 (patch) | |
tree | 0a45a4f914577483e53f9de2c99da7e6493ba4a7 /sc/source/core/data | |
parent | bfceb557efcd607ef018ae35fc73f8d61a9b9a4e (diff) |
Resolves: tdf#94249 do not remove broadcasters while iterators are in use
EndListeningContext holds BroadcasterStoreType iterators in its
ColumnBlockPositionSet and collects broadcasters to purge them at the
end. Removing broadcasters from ScColumn::maBroadcasters in between
invalidates the iterators. Hence calling the "normal" EndListening()
that removes a broadcaster when all listeners are gone while an
EndListeningContext is in use is bad.
Change-Id: Ibdd88469e91e6173ceff1f391c23ef7cb7c6f596
Diffstat (limited to 'sc/source/core/data')
-rw-r--r-- | sc/source/core/data/column.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/column3.cxx | 8 |
2 files changed, 8 insertions, 8 deletions
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index c7d71e30a80d..7b1e410e17a8 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -1908,15 +1908,15 @@ void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol) // Split the formula grouping at the top and bottom boundaries. sc::CellStoreType::position_type aPos = maCells.position(nStartRow); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); aPos = maCells.position(aPos.first, nEndRow+1); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); // Do the same with the destination column. aPos = rCol.maCells.position(nStartRow); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); aPos = rCol.maCells.position(aPos.first, nEndRow+1); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); // Move the broadcasters to the destination column. maBroadcasters.transfer(nStartRow, nEndRow, rCol.maBroadcasters, nStartRow); diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 0bcc2066f91d..c39c295eae06 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -327,13 +327,13 @@ void ScColumn::DetachFormulaCells( const sc::CellStoreType::position_type& aPos, size_t nLength ) { // Split formula grouping at the top and bottom boundaries. - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, nullptr); size_t nRow = aPos.first->position + aPos.second; size_t nNextTopRow = nRow + nLength; // start row of next formula group. if (ValidRow(nNextTopRow)) { sc::CellStoreType::position_type aPos2 = maCells.position(aPos.first, nNextTopRow); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos2); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos2, nullptr); } if (pDocument->IsClipOrUndo()) @@ -368,11 +368,11 @@ void ScColumn::DetachFormulaCells( sc::EndListeningContext& rCxt, SCROW nRow1, S sc::CellStoreType::iterator it = aPos.first; // Split formula grouping at the top and bottom boundaries. - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, &rCxt); if (ValidRow(nRow2+1)) { aPos = maCells.position(it, nRow2+1); - sc::SharedFormulaUtil::splitFormulaCellGroup(aPos); + sc::SharedFormulaUtil::splitFormulaCellGroup(aPos, &rCxt); } if (pDocument->IsClipOrUndo()) |