[fpc-pascal] "Variant array locked" error for now apparent reason

Graeme Geldenhuys graemeg.lists at gmail.com
Mon Jan 8 11:06:11 CET 2007


Thanks, will submit a bug report today.

Graeme.


On 1/8/07, Florian Klaempfl <florian at freepascal.org> wrote:
> 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 ---------------
> >
> >
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>


-- 
Graeme Geldenhuys

There's no place like S34° 03.168'  E018° 49.342'



More information about the fpc-pascal mailing list