As the subject line says, I keep getting this error and I can't see why! I'm trying to get the last 4 unit test errors fixed running the tiOPF project under FPC 2.1.1. (latest SVN revision)
The tiOPF function tiVariantArrayToString() converts a Variant Array to a String. I placed some writeln() statements in the code to see how far it gets before the error occurs. As you can see from the backtrace output, that it finishes (exits) the function, and then the error occurs. Also nowhere in the code do I lock the variant array, as I am not modifying it, just iterating through it's elements. Hope someone can shed some light on this issue - I'm stuck! :-( ------ Error Start ------ <ListOfErrors> <Error> <Message>TTestTIUtils.tiVariantArrayToString: Variant array locked</Message> <ExceptionClass>EVariantArrayLockedError</ExceptionClass> <ExceptionMessage>Variant array locked</ExceptionMessage> <SourceUnitName>/mnt/data/programming/3rdParty/tiOPF2/Source/Core/tiUtils.pas</SourceUnitName> <LineNumber>890</LineNumber> <FailedMethodName>_INTTOSTR</FailedMethodName> </Error> </ListOfErrors> ------ Error End -------- ------------ The Code ------------ function tiVariantArrayToString(AValue: Variant): string; //--------- procedure appendVariantToStringList(pStringList: TStringList; pVariant: Variant; var pIndent: integer); var i: integer; iLow: integer; iHigh: integer; begin if VarIsArray(pVariant) then // if tiIsVariantOfType(pVariant, varArray) then begin iLow := varArrayLowBound(pVariant, 1); iHigh := varArrayHighBound(pVariant, 1); for i := iLow to iHigh do begin inc(pIndent); if i = iLow then pStringList.add(tiSpace(pIndent*3) + '['); appendVariantToStringList(pStringList, pVariant[i], pIndent); if i = iHigh then pStringList.add(tiSpace(pIndent*3) + ']'); dec(pIndent); end; end else begin pStringList.add(tiSpace(pIndent*3 + 1) + varToStr(pVariant)); end; end; var lStringList : TStringList; pIndent : integer; dimcount: integer; begin lStringList := TStringList.Create; try pIndent := -1; writeln('*** Start ***'); appendVariantToStringList(lStringList, AValue, pIndent); writeln('*** Finish ***'); result := lStringList.Text; finally lStringList.free; end; writeln('*** Exit ***'); end; ----------- Code End -------------- ... and the backtrace .... ----------- Backtrace Start ---------- (gdb) run Starting program: /UnitTests/GUI/fpcUnitTIOPFGui [Thread debugging using libthread_db enabled] [New Thread -1213237024 (LWP 12705)] InitKeyboardTables - Duplicate Keysymstring="=" for keycode=126 ignored. Existing: vkey=57, flags=0x00 New: vkey=227, flags=0x00 [New Thread -1215480912 (LWP 12711)] *** Start *** *** Finish *** *** Exit *** [Switching to Thread -1213237024 (LWP 12705)] Breakpoint 1, 0x08060196 in fpc_raiseexception () (gdb) bt #0 0x08060196 in fpc_raiseexception () #1 0x0824c21c in VARIANTS_VARARRAYLOCKEDERROR () at tiUtils.pas:2784 #2 0x0824c4c7 in VARIANTS_RAISEVAREXCEPTION$HRESULT () at tiUtils.pas:2784 #3 0x0824c558 in VARIANTS_VARRESULTCHECK$HRESULT () at tiUtils.pas:2784 #4 0x08247e69 in VARIANTS_SYSVARCLEARPROC$TVARDATA () at tiUtils.pas:2023 #5 0x080605dd in SYSTEM_VARIANT_CLEAR$TVARDATA () #6 0x08062326 in fpc_decref () #7 0x0823e1c1 in TIVARIANTARRAYTOSTRING (AVALUE={VARIANT} 0xbfe6562c) at tiUtils.pas:1309 #8 0x082b6bb5 in TTESTTIUTILS__TIVARIANTARRAYTOSTRING (this=0xb78eb240) at tiUtils_TST.pas:1709 #9 0x082007e7 in FPCUNIT_TTESTCASE_$__RUNTEST () #10 0x0820071e in FPCUNIT_TTESTCASE_$__RUNBARE () #11 0x082017aa in FPCUNIT_PROTECTTEST$TTEST$TTESTRESULT () #12 0x082018a1 in FPCUNIT_TTESTRESULT_$__RUNPROTECTED$TTEST$TPROTECT () #13 0x082017e0 in FPCUNIT_TTESTRESULT_$__RUN$TTESTCASE () #14 0x082006cb in FPCUNIT_TTESTCASE_$__RUN$TTESTRESULT () #15 0x082011c1 in FPCUNIT_TTESTSUITE_$__RUNTEST$TTEST$TTESTRESULT () #16 0x083cf820 in _$FPCUNIT$_Ld39 () #17 0x08201176 in FPCUNIT_TTESTSUITE_$__RUN$TTESTRESULT () #18 0x00000070 in ?? () #19 0xb7f4f760 in ?? () #20 0xb70a1980 in ?? () #21 0x00140022 in ?? () #22 0xb7a93680 in ?? () <...snip...> ----------- Backtrace End --------------- -- Graeme Geldenhuys There's no place like S34° 03.168' E018° 49.342' _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal