https://bugs.documentfoundation.org/show_bug.cgi?id=79049

Julien Nabet <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]

--- Comment #6 from Julien Nabet <[email protected]> ---
On pc Debian x86-64 with master sources updated today, I could reproduce this.

First I noticed gdb the call to "Application::Yield" in a loop in file
importSheetFragments (see
http://opengrok.libreoffice.org/xref/core/sc/source/filter/oox/workbookfragment.cxx#344)
but thread apply all bt shows the pb was elsewhere
Indeed, after some calls to Yield, it showed lots of calls (in fact, I never
saw the end of it after some minutes) to SheetDataBuffer::addColXfStyle
(http://opengrok.libreoffice.org/xref/core/sc/source/filter/oox/sheetdatabuffer.cxx#358).
It's called at 2 locations:
1)
    431     std::map< FormatKeyPair, ApiCellRangeList > rangeStyleListMap;
    432     for( XfIdRangeListMap::const_iterator aIt =
maXfIdRangeLists.begin(), aEnd = maXfIdRangeLists.end(); aIt != aEnd; ++aIt )
    433     {
    434         addIfNotInMyMap( getStyles(), rangeStyleListMap,
aIt->first.first, aIt->first.second, aIt->second );
    435     }
    436     // gather all ranges that have the same style and apply them in
bulk
    437     for (  std::map< FormatKeyPair, ApiCellRangeList >::iterator it =
rangeStyleListMap.begin(), it_end = rangeStyleListMap.end(); it != it_end; ++it
)
    438     {
    439         const ApiCellRangeList& rRanges( it->second );
    440         for ( ::std::vector< CellRangeAddress >::const_iterator
it_range = rRanges.begin(), it_rangeend = rRanges.end(); it_range!=it_rangeend;
++it_range )
    441             addColXfStyle( it->first.first, it->first.second, *it_range
);
    442     }

see
http://opengrok.libreoffice.org/xref/core/sc/source/filter/oox/sheetdatabuffer.cxx#441

2) (some lines after)
    444     for ( std::map< sal_Int32, std::vector< ValueRange > >::iterator it
= maXfIdRowRangeList.begin(), it_end =  maXfIdRowRangeList.end(); it != it_end;
++it )
    445     {
    446         ApiCellRangeList rangeList;
    447         AddressConverter& rAddrConv = getAddressConverter();
    448         // get all row ranges for id
    449         for ( std::vector< ValueRange >::iterator rangeIter =
it->second.begin(), rangeIter_end = it->second.end(); rangeIter !=
rangeIter_end; ++rangeIter )
    450         {
    451             if ( it->first == -1 ) // it's a dud skip it
    452                 continue;
    453             CellRangeAddress aRange( getSheetIndex(), 0,
rangeIter->mnFirst, rAddrConv.getMaxApiAddress().Column, rangeIter->mnLast );
    454 
    455             addColXfStyle( it->first, -1, aRange, true );
    456         }
    457     }

I don't understand the goal of rangeStyleListMap so I removed it for the test.
However, I still reproduced this never ending loop.

Anyway, it seems the problem is in this part since in a second time, I
commented the 2 parts and I could open the file in about 20secs (i5, 6GB)

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
Libreoffice-bugs mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-bugs

Reply via email to