Memory leak with Lazy?
Issue #208
invalid
I have 2 simple models with OneToMany relation:
[Entity]
[Table('Prijemka', 'Obch_Data')]
TModelPrijemkaTest = class
private
FID: Int64;
FCislo: Integer;
[OneToMany(False, [ckCascadeAll])]
FPolozky: Lazy<IList<TModelPrijemkaPolTest>>;
function GetPolozky: IList<TModelPrijemkaPolTest>;
procedure SetPolozky(const Value: IList<TModelPrijemkaPolTest>);
public
constructor Create;
[UniqueConstraint]
[AutoGenerated]
[Column('ID',[cpRequired,cpPrimaryKey,cpDontUpdate,cpNotNull],10,0)]
property ID: Int64 read FID write FID;
[Column('Cislo',[cpRequired,cpNotNull],10,0)]
property Cislo: Integer read FCislo write FCislo;
property Polozky: IList<TModelPrijemkaPolTest> read GetPolozky write SetPolozky;
end;
[Entity]
[Table('PrijemkaPol', 'Obch_Data')]
TModelPrijemkaPolTest = class
private
FDoklad: Integer;
FID: string;
FKod: Int64;
FNazev: string;
[ForeignJoinColumn('Doklad', 'Prijemka', 'ID', [fsOnDeleteCascade, fsOnUpdateCascade])]
FPrijemka: TModelPrijemkaTest;
public
constructor Create;
[Column('Doklad',[cpRequired,cpNotNull],10,0)]
property Doklad: Integer read FDoklad write FDoklad;
[ManyToOne(False, [ckCascadeAll], 'ID')]
property Prijemka: TModelPrijemkaTest read FPrijemka write FPrijemka;
[AutoGenerated]
[Column('ID',[cpRequired,cpPrimaryKey,cpDontUpdate,cpNotNull],254)]
property ID: string read FID write FID;
[Column('Kod',[cpRequired,cpNotNull],19,0)]
property Kod: Int64 read FKod write FKod;
[Column('Nazev',[],50)]
property Nazev: string read FNazev write FNazev;
end;
Now I use test code:
var
lModel:TModelPrijemkaTest;
lPocet: Integer;
begin
lModel:=Session.FindOne<TModelPrijemkaTest>(13);
lPocet:=lModel.Polozky.Count;
lModel.Polozky.Clear;
lModel.Free;
end;
Main model have 3 items (Polozky),it's OK,but FastMM show memory leak:
21 - 36 bytes: TModelPrijemkaTest x 3, TCriticalSection x 3
37 - 52 bytes: TLazy<System.IInterface> x 3
53 - 68 bytes: TAbstractSession.ResolveLazyInterface$18829$ActRec x 3
This is bug or something wrong in my code?
Comments (4)
-
repo owner -
repo owner - changed status to invalid
-
repo owner Nevermind. Its the FPrijemka field in the TModelPrijemkaPolTest instances that are not freed. They are not pointing to their parent instance obviously.
-
repo owner - changed version to 1.2
- Log in to comment
You realize that it shows TModelPrijemkaTest x 3 and not as you claim TModelPrijemkaPolTest x 3, yes? So obviously somewhere else you fetch those and don't free them.