[fpc-pascal] "Variant array locked" error for now apparent reason
Florian Klaempfl
florian at freepascal.org
Mon Jan 8 10:59:34 CET 2007
Graeme Geldenhuys schrieb:
> 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! :-(
I didn't look at it but please submit a bug report, so it won't be forgotten.
>
>
>
> ------ 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 ---------------
>
>
More information about the fpc-pascal
mailing list