On 11/04/2010 20:01, Martin wrote:
On 11/04/2010 19:39, Martin wrote:
On 11/04/2010 18:37, Alexander Klenin wrote:
On Mon, Apr 12, 2010 at 02:02, Martin<[email protected]>  wrote:
destructor TChart.Destroy;
begin
  FSeries.Free;
...
  inherited Destroy;
end;

inherited destroy calls getChildren, which accesses FSeries.
Even that I would call suspicious, but I think the problem is deeper.
The crash still happens even if I comment out the call to inherited Destroy
in TChart.Destroy.
I applied your other patch [ FreeAndNil(Fseries); // if FSeries = nil then exit ]
And I no longer get the crash, so that works.

--------------------

As for calls to GetChildren

the first happens when
  FreeAndNil(FSeries)
is called.

I looked through the Callstack, and it seems more than reasonable:

FSerieas.Free, calls  TChartSeriesList.Clear;
This destorys some TCharts that are hold by FSeries
[  Items[i].FChart := nil;  ] => TCharts are components,
Sorry one line off, next line
    Items[i].Free;

in
procedure TChartSeriesList.Clear;
var
  i: Integer;
begin
  for i := 0 to FList.Count - 1 do begin
    Items[i].FChart := nil;
    Items[i].Free;
  end;
  FList.Clear;
end;


Items are TLineSeries and they are TComponents

so they notify there owner, and everyone who requested it, about their death. => The owner is the Form, and the form tells OI => and OI makes sure that all of its own structures are good (RefreshSelection; TComponentTreeView.RebuildComponentNodes; and the likes)

IMHO that is reasonable.

I wont do it, but if you dig deeper, you will find that the other calls are of similar nature.

Bottomline is, that any Component must expect all kinds of calls during it's destruction, and must at least return them without crash.

And hey, the best I have seen was a WM_SETFOCUS to a Component in destruction. I couldn't believe it.....

Martin











--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to