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
