← Back to team overview

kaliveda-dev team mailing list archive

[Bug 1399661] Re: A bit of a misunderstanding between KVSeqCollection::SetCleanups() and gRoot->GetListOfCleanups()

 

Bug fixed in branch IV:
http://bazaar.launchpad.net/~indra-vamos/kaliveda/IV/revision/691

I wait a bit to test the modifications in IV branch  before to merge
this rev in main branch lp:kaliveda

-- 
You received this bug notification because you are a member of KaliVeda
Development Team, which is subscribed to KaliVeda.
https://bugs.launchpad.net/bugs/1399661

Title:
  A bit of a misunderstanding between KVSeqCollection::SetCleanups() and
  gRoot->GetListOfCleanups()

Status in KaliVeda data analysis framework:
  New
Status in KaliVeda 1.9 series:
  New

Bug description:
  First, some command lines in root to illustrate this report:

  ----------------------------------------------------
  root [0] KVList *l2 = new KVList
  Warning in <TClass::TClass>: no dictionary for class KVSeqCollection is available
  root [1] l2->GetName()
  (const char* 0x913db40)"KVSeqCollection_2"
  root [2] l2->SetCleanup()
  root [3] KVList *l3 = (KVList *)l2->Clone()
  root [4] l3->GetName()
  (const char* 0x916b518)"KVSeqCollection_2"
  root [5] l3->IsCleanup()
  (const Bool_t)1
  root [6] gROOT->GetListOfCleanups()->Print()
  Collection name='Cleanups', class='THashList', size=8
   Collection name='TObjArray', class='TObjArray', size=10
   Collection name='Canvases', class='TList', size=0
   Collection name='Browsers', class='TList', size=0
   Collection name='Tasks', class='TList', size=0
   Collection name='Files', class='TList', size=0
   Collection name='ClosedFiles', class='TList', size=0
   OBJ: TCint	C/C++	CINT C/C++ Interpreter
   Collection name='KVSeqCollection_2', embedded list class='TList', size=0
  root [7] gROOT->GetListOfCleanups()->Last()
  (const class TObject*)0x913dab8
  root [8] l2
  (class KVList*)0x913dab8
  root [9] l3
  (class KVList*)0x916b730
  root [10] l2->SetCleanup()
  root [11] l2->SetCleanup()
  root [12] gROOT->GetListOfCleanups()->Print()
  Collection name='Cleanups', class='THashList', size=10
   Collection name='TObjArray', class='TObjArray', size=10
   Collection name='Canvases', class='TList', size=0
   Collection name='Browsers', class='TList', size=0
   Collection name='Tasks', class='TList', size=0
   Collection name='Files', class='TList', size=0
   Collection name='ClosedFiles', class='TList', size=0
   OBJ: TCint	C/C++	CINT C/C++ Interpreter
   Collection name='KVSeqCollection_2', embedded list class='TList', size=0
   Collection name='KVSeqCollection_2', embedded list class='TList', size=0
   Collection name='KVSeqCollection_2', embedded list class='TList', size=0
  ----------------------------------------------------
  	

  1) we see that the list l3 (line [4]) has the same name as the list l2 (line [1]). This may be a problem
  for the looking-up in gROOT->GetListOfCleanups() which is a THashList.
  So in the methods Streamer(...) (called by Clone()) and Copy(...) the object should keep its first name (individual name).

  2) since l3 is a clone of l2 and l2 has IsCleanup() status then l3 has
  the same one, I am agree. Nevertheless it does not appear in the list
  of Cleanups as shown in line [6]. indeed, according to line [7,8,9]
  only l2 is present in gROOT->GetListOfCleanups().

  3) we can see lines [10,11,12] that the list l2 appears in the
  gROOT->GetListOfCleanups() as often as we call  l2->Cleanup().

  
  These 3 problems seems to be the origin of a segmentation violation that I obtain when I play with the KVIDZAGrid::SetEditable() toggle method. It is difficult to reproduce this bug. 

  SetEditable() calls UpdateLastSavedVersion() method. 
  In this method a new KVIDGraph (grid_copy) is built. grid_copy has two Cleanup lists (fCuts and fIdentifiers), and both are added to the THashList gROOT->GetListOfCleanups(). 
  When a copy of the initial grid (grid_init) is made in grid_copy then the name of its lists (fCuts and fIdentifiers) is changed. Now, if program tries to find these lists in gROOT->GetListOfCleanups(), a segmentation violation may be produced since the hash value of their new name may be different. Indeed, it is their initial name that was used to add them in gROOT->GetListOfCleanups().

  
  KaliVeda version: 1.9 and IV

To manage notifications about this bug go to:
https://bugs.launchpad.net/kaliveda/+bug/1399661/+subscriptions


References