Hello,

I have the following code:

{$mode objfpc}
interface

...

function DefaultObj: TObject;

implementation

var
  _Holder: IHolder;

function DefaultObj: TObject;
begin
  if not Assigned(_Holder) then
    _Holder := THolder.Create(TSomeClass.Create);
  Result := _Holder.Instance;
end;

IHolder is an interface that the THolder class implements. The first call to the DefaultObj function creates the holder instance, as expected. New calls to the same function doesn't recreate it. Again, as expected.

The first call that I make to DefaultObj from *another* unit recreate the object, because, I don't know why, the _holder var points again to nil.

Changing the type of the _holder to THolder (ie an object pointer instead of an interface pointer) everything works flawlessly.

I have tried to create a small sample but couldn't reproduce the issue, anyway the source of the problem is gpl code. It fails under 2.0.4 and current fixes_2_2 branch. Hints?

Thanks.

--
Joao Morais

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to