← Back to team overview

kaliveda-dev team mailing list archive

[Bug 1047241] Re: Fuite de mémoire dans KVINDRA

 

Il y a  une autre fuite de mémoire lorsque la fonction KVMultiDetArray
::SetCalibrators() est appelée, voir teste suivant:

rroot [35] cm.Check()
Info in <KVClassMonitor::Check>: Checking class instance statistics
root [36] gIndra->UpdateArray()
^[[A^[[A^[[AInfo in <KVINDRA::SetIdentifications>: No active identifications
Info in <KVINDRA::SetDetectorThicknesses>: File DetectorThicknesses.dat not found
root [37] cm.Check()
Info in <KVClassMonitor::Check>: Checking class instance statistics
Warning in <KVClassMonitor::Check>: KVLightEnergyCsI +648     (3240 --> 3888)
Warning in <KVClassMonitor::Check>: KVACQParam +23     (2022 --> 2045)
 :
 :
root [38] cm.Check()
Info in <KVClassMonitor::Check>: Checking class instance statistics
root [39] KVDetector *det=NULL
root [40] TIter next(gIndra->GetListOfCsI())
root [41] while(det=(KVDetector*)next()) det->SetCalibrators()
root [42] cm.Check()
Info in <KVClassMonitor::Check>: Checking class instance statistics
Warning in <KVClassMonitor::Check>: KVLightEnergyCsI +648     (3888 --> 4536)

La fonction KVMultiDetArray ::UpdateArray() appelle KVMultiDetArray ::SetCalibrators() qui appelle à son tour la fonction SetCalibrators() de tous les détecteurs. Dans la méthode KVCsI ::SetCalibrators() il y a une duplication des KVCalibrator's contrairement à la même méthode des autres détecteurs. Problème évité par exemple avec la condition :
 if(!AddCalibrator(c)) delete c;
dans KVSilicon ::SetCalibrators() .

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

Title:
  Fuite de mémoire dans KVINDRA

Status in KaliVeda data analysis framework:
  New

Bug description:
  J'ai remarqué une petite fuite de mémoire qui provenant des
  KVACQParam's définis dans la méthode KVINDRA::SetArrayACQParams(). Ces
  KVACQParam's n'étant pas associés à un détecteur, il ne sont pas
  détruit lorsque le KVINDRA est détruit. Voir le test suivant:

  root [0] KVClassMonitor cm
  :
  :
  root [9] cm.Check()
  Info in <KVClassMonitor::Check>: Checking class instance statistics
  root [10] new KVINDRA
  root [11] gIndra->Build()
  root [12] delete gIndra
  root [13] cm.Check()
  Info in <KVClassMonitor::Check>: Checking class instance statistics
  Warning in <KVClassMonitor::Check>: KVACQParam +23     (23 --> 46)

  de plus à chaque appel de la méthode KVINDRA::UpdateArray(), ces 23 KVACQParam's sont perdus dans la nature.
  Je conçois que cette perte de mémoire est mineure car on ne travaille jamais avec plusieurs INDRA en même temps, mais bon peut une prochaine manipe qui sait!

  Je pense qu'il faudrait que les 3 KVACQParameter's associés au
  KVINDRATriggerInfo soient détruits dans le destructeur de
  KVINDRATriggerInfo.  Pour les 20 autres, il faudrait peut être les
  charger dans une donnée membre de KVMultiDetArray,  un KVSeqCollection
  propriétaire, qui serait détruit dans le destructeur de
  KVMultiDetArray. Et finalement, dans la méthode
  KVINDRA::SetArrayACQParams ne créer les ACQParameters d'INDRA
  seulement si ce KVSeqCollection est vide et que KVINDRATriggerInfo est
  vide.

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


References