[ROOT] TPaveStats destructor improvements.

From: Tetsuo Arisawa (arisawa@hepexp.phys.waseda.ac.jp)
Date: Wed Sep 04 2002 - 13:12:48 MEST


 Hello,

 I have troubles handling a TCanvas read from a file
when I use the newest ROOT version, v3.03.
Segmentation faults occur when I clear or delete the canvas.
This has not happened in using the older ROOT versions.
(I do not know how the file is created in detail.)

 According to a release note, TPaveStats class is updated from v3.03.
So when I click one of two TPaveStats on the canvas by right mouse
button
and choose "Delete", then the segmentation fault shows up.

 In the source code of v.303, the updated destructor contain a line:

   if (!fParent->TestBit(kInvalidObject))
fParent->RecursiveRemove(this);

that the v.3.02 does not have.
I think the line should be

   if ( fParent && !fParent->TestBit(kInvalidObject))
   fParent->RecursiveRemove(this);

for stability.  How do  you think?

You could reproduce the phenomena:

{
  gROOT->Reset();

  TCanvas *c = new TCanvas( "c","canvas",500,500);
  TPaveStats *stats = new TPaveStats(0.1,0.1,0.9,0.9);
  stats->AddText("STATS");
  stats->Draw();
  stats->SetBit( kCanDelete );
}

   Then test one of the following:
   1. c->Delete(); or delete c;
   2. c->Clear();
   3. mouse right click on TPaveStats and choose Delete.

  If you do the following, segmentation fault disappears.
  stats->SetParent(c);

Regards
Tetsuo Arisawa
 Waseda Univ. Japan / CDF



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:06 MET