Skip to content
Snippets Groups Projects
Commit fd9c65b0 authored by Whitney Armstrong's avatar Whitney Armstrong
Browse files

Cleaned up memory leak (I think)

	modified:   include/monitor/MonitoringDisplay.h
	modified:   src/DisplayPlots.cxx
	modified:   src/DisplayServer.cxx
	modified:   ../../tutorial/test_canvas.cxx
parent 8d64d2e1
No related branches found
No related tags found
No related merge requests found
...@@ -63,10 +63,10 @@ namespace hallc { ...@@ -63,10 +63,10 @@ namespace hallc {
DisplayPlot* CreateDisplayPlot(std::string folder, DisplayPlot* CreateDisplayPlot(std::string folder,
std::string name, std::string name,
InitFunction_t&& f_init, InitFunction_t&& f_init,
UpdateFunction_t&& f_update); UpdateFunction_t&& f_update = [](hallc::DisplayPlot&) { return 0; });
DisplayPlot* CreateDisplayPlot(std::string name, DisplayPlot* CreateDisplayPlot(std::string name,
InitFunction_t&& f_init, InitFunction_t&& f_init,
UpdateFunction_t&& f_update); UpdateFunction_t&& f_update = [](hallc::DisplayPlot&) { return 0; });
display::DisplayData* GetDisplayData() { return &_data; } display::DisplayData* GetDisplayData() { return &_data; }
......
...@@ -5,22 +5,38 @@ ...@@ -5,22 +5,38 @@
namespace hallc { namespace hallc {
namespace display { namespace display {
PlotData::~PlotData(){ PlotData::~PlotData(){
for(auto& h : _hists1){ delete _canvas;
delete h; _canvas = nullptr;
h = nullptr; _hists1.clear();
} _hists2.clear();
for(auto& h : _hists2){ _hists3.clear();
delete h; _graphs1.clear();
h = nullptr;
} //for (auto& h : _hists1) {
for(auto& h : _hists3){ // if (h) {
delete h; // delete h;
h = nullptr; // h = nullptr;
} // }
for(auto& h : _graphs1){ //}
delete h; //for (auto& h : _hists2) {
h = nullptr; // if (h) {
} // delete h;
// h = nullptr;
// }
//}
//for(auto& h : _hists3){
// if (h) {
// delete h;
// h = nullptr;
// }
//}
//for(auto& h : _graphs1){
// if (h) {
// delete h;
// h = nullptr;
// }
//}
} }
...@@ -67,6 +83,7 @@ namespace hallc { ...@@ -67,6 +83,7 @@ namespace hallc {
} }
DisplayData::~DisplayData() { DisplayData::~DisplayData() {
// Detstructor is needed to cleanup all pointers (historgrams and canvases)
for(auto& [i,plot_data] : _plot_map) { for(auto& [i,plot_data] : _plot_map) {
delete plot_data; delete plot_data;
//plot_data = nullptr; //plot_data = nullptr;
......
...@@ -131,8 +131,13 @@ namespace hallc { ...@@ -131,8 +131,13 @@ namespace hallc {
save_counter++; save_counter++;
if( save_counter > 100) { if( save_counter > 100) {
gDirectory->pwd();
gDirectory->ls("-m");
SaveTopFolder(); SaveTopFolder();
save_counter = 0; save_counter = 0;
spdlog::debug("after saving...");
gDirectory->ls("-m");
gROOT->GetListOfCanvases()->ls();
} }
if (s == (TSocket*)-1) { if (s == (TSocket*)-1) {
...@@ -159,7 +164,9 @@ namespace hallc { ...@@ -159,7 +164,9 @@ namespace hallc {
// std::cout << " removing socket " << s << "\n"; // std::cout << " removing socket " << s << "\n";
RemoveSocket(s); RemoveSocket(s);
_mon->Remove(s); _mon->Remove(s);
SaveTopFolder(); if(_connected_clients.size() == 0) {
SaveTopFolder();
}
continue; continue;
} }
...@@ -201,8 +208,11 @@ namespace hallc { ...@@ -201,8 +208,11 @@ namespace hallc {
_connected_clients[s] = dd; _connected_clients[s] = dd;
for (auto& [i, data] : dd->_plot_map) { for (auto& [i, data] : dd->_plot_map) {
std::string name = dd->GetFolder() + data->_folder_name; std::string name = dd->GetFolder() + data->_folder_name;
auto sub_folder = _server->GetSniffer()->FindTObjectInHierarchy(name.c_str()); auto sub_folder = (TFolder*)_server->GetSniffer()->FindTObjectInHierarchy(name.c_str());
if (sub_folder) { if (sub_folder) {
spdlog::info("Found object's folder at : {}",name.c_str());
spdlog::info("object type is : {}",sub_folder->ClassName());
spdlog::debug("folder's list contains {} objects",sub_folder->GetListOfFolders()->GetEntries());
auto tobj = (TCanvas*)sub_folder->FindObject(data->_canvas->GetName()); auto tobj = (TCanvas*)sub_folder->FindObject(data->_canvas->GetName());
if (tobj) { if (tobj) {
spdlog::info("found object {} ", tobj->GetName()); spdlog::info("found object {} ", tobj->GetName());
...@@ -214,15 +224,15 @@ namespace hallc { ...@@ -214,15 +224,15 @@ namespace hallc {
} }
// std::cout << "hiding : " << name << "\n"; // std::cout << "hiding : " << name << "\n";
_server->Register(name.c_str(), data->_canvas); _server->Register(name.c_str(), data->_canvas);
for (auto h1 : data->_hists1) { //for (auto h1 : data->_hists1) {
_server->Register(name.c_str(), h1); // _server->Register(name.c_str(), h1);
} //}
for(auto h2 : data->_hists2) { //for(auto h2 : data->_hists2) {
_server->Register(name.c_str(), h2); // _server->Register(name.c_str(), h2);
} //}
for(auto h2 : data->_graphs1) { //for(auto h2 : data->_graphs1) {
_server->Register(name.c_str(), h2); // _server->Register(name.c_str(), h2);
} //}
//_server->Hide(name.c_str(), false); //_server->Hide(name.c_str(), false);
} }
......
...@@ -21,9 +21,9 @@ void test_canvas(){ ...@@ -21,9 +21,9 @@ void test_canvas(){
h4->FillRandom("gaus",10000); h4->FillRandom("gaus",10000);
auto ddisplay = new hallc::MonitoringDisplay(); // Use default socket server host/port auto ddisplay = new hallc::MonitoringDisplay(); // Use default socket server host/port
ddisplay->SetRootFolder("/user_space2/"); ddisplay->SetRootFolder("/user_space1/");
auto testdisp = ddisplay->CreateDisplayPlot("test_canvas3", "c1", auto testdisp = ddisplay->CreateDisplayPlot("test_canvas0", "c1",
[&](hallc::DisplayPlot& plt) { [&](hallc::DisplayPlot& plt) {
auto c = plt.SetCanvas(new TCanvas(plt.GetName().c_str(), plt.GetName().c_str())); auto c = plt.SetCanvas(new TCanvas(plt.GetName().c_str(), plt.GetName().c_str()));
//c->Divide(2,2); //c->Divide(2,2);
...@@ -43,12 +43,30 @@ void test_canvas(){ ...@@ -43,12 +43,30 @@ void test_canvas(){
return 0; return 0;
}, },
[&](hallc::DisplayPlot& plt) { [&](hallc::DisplayPlot& plt) {
//plt.GetCanvas()->cd();
//h1->Draw();
//plt.GetCanvas()->BuildLegend();
return 0; return 0;
}); });
ddisplay->CreateDisplayPlot("test_canvas1", "c2",
[&](hallc::DisplayPlot& plt) {
auto c = plt.SetCanvas(new TCanvas(plt.GetName().c_str(), plt.GetName().c_str()));
//c->Divide(2,2);
plt._plot_data._hists1.push_back(h2);
//plt._plot_data._hists1.push_back(h2);
//plt._plot_data._hists1.push_back(h3);
//plt._plot_data._hists1.push_back(h4);
//c->cd(1);
h2->Draw();
//c->cd(2);
//h2->Draw();
//c->cd(3);
//h3->Draw();
//c->cd(4);
//h4->Draw();
c->BuildLegend();
return 0;
},
[&](hallc::DisplayPlot& plt) { return 0; });
ddisplay->InitAll(); ddisplay->InitAll();
ddisplay->UpdateAll(); ddisplay->UpdateAll();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment