diff --git a/sc/source/filter/oox/formulaparser.cxx b/sc/source/filter/oox/formulaparser.cxx index 77ecaee..398ed3a 100644 --- a/sc/source/filter/oox/formulaparser.cxx +++ b/sc/source/filter/oox/formulaparser.cxx @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include "addressconverter.hxx" @@ -703,10 +704,26 @@ Any& FormulaParserImpl::appendRawToken( sal_Int32 nOpCode ) return maTokenStorage.append( nOpCode ); } +osl::Mutex aHack; + Any& FormulaParserImpl::insertRawToken( sal_Int32 nOpCode, size_t nIndexFromEnd ) { - maTokenIndexes.insert( maTokenIndexes.end() - nIndexFromEnd, maTokenStorage.size() ); - return maTokenStorage.append( nOpCode ); + fprintf(stderr, "FormulaParserImpl::insertRawToken %p %ld %ld %d\n", this, maTokenIndexes.size(), nIndexFromEnd, osl_getThreadIdentifier(NULL)); + fprintf(stderr, "trying to acquire %p in %d\n", this, osl_getThreadIdentifier(NULL)); + assert(aHack.tryToAcquire()); + try + { + maTokenIndexes.insert( maTokenIndexes.end() - nIndexFromEnd, maTokenStorage.size() ); + Any& foo = maTokenStorage.append( nOpCode ); + aHack.release(); + fprintf(stderr, "released %p in %d\n", this, osl_getThreadIdentifier(NULL)); + return foo; + } + catch(...) + { + fprintf(stderr, "WHAT THE FUCK\n"); + throw; + } } size_t FormulaParserImpl::appendWhiteSpaceTokens( const WhiteSpaceVec* pSpaces )