1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

fix(memory leaks): MCOL-5791 - get rid of memory leaks in plugin code (#3365)

There were numerous memory leaks in plugin's code and associated code.
During typical run of MTR tests it leaked around 65 megabytes of
objects. As a result they may severely affect long-lived connections.

This patch fixes (almost) all leaks found in the plugin. The exceptions
are two leaks associated with SHOW CREATE TABLE columnstore_table and
getting information of columns of columnstore-handled table. These
should be fixed on the server side and work is on the way.
This commit is contained in:
Sergey Zefirov
2024-12-06 12:04:55 +03:00
committed by GitHub
parent aa4bbc0152
commit 3bcc2e2fda
30 changed files with 450 additions and 217 deletions

View File

@ -65,7 +65,7 @@ void View::transform()
csep->sessionID(fParentGwip->sessionid);
// gwi for the sub query
gp_walk_info gwi(fParentGwip->timeZone);
gp_walk_info gwi(fParentGwip->timeZone, fParentGwip->subQueriesChain);
gwi.thd = fParentGwip->thd;
uint32_t sessionID = csep->sessionID();
@ -150,6 +150,7 @@ void View::transform()
if (gwi.fatalParseError)
{
setError(gwi.thd, ER_INTERNAL_ERROR, gwi.parseErrorText);
delete csep;
return;
}
}
@ -157,6 +158,7 @@ void View::transform()
{
setError(gwi.thd, ER_INTERNAL_ERROR, ie.what());
CalpontSystemCatalog::removeCalpontSystemCatalog(sessionID);
delete csep;
return;
}
catch (...)
@ -164,6 +166,7 @@ void View::transform()
string emsg = IDBErrorInfo::instance()->errorMsg(ERR_LOST_CONN_EXEMGR);
setError(gwi.thd, ER_INTERNAL_ERROR, emsg);
CalpontSystemCatalog::removeCalpontSystemCatalog(sessionID);
delete csep;
return;
}
@ -176,6 +179,7 @@ void View::transform()
// merge view list to parent
fParentGwip->viewList.insert(fParentGwip->viewList.end(), gwi.viewList.begin(), gwi.viewList.end());
gwi.viewList.clear();
// merge non-collapsed outer join to parent select
stack<ParseTree*> tmpstack;
@ -191,6 +195,12 @@ void View::transform()
fParentGwip->ptWorkStack.push(tmpstack.top());
tmpstack.pop();
}
while (!gwi.rcWorkStack.empty()) {
delete gwi.rcWorkStack.top();
gwi.rcWorkStack.pop();
}
delete csep;
}
uint32_t View::processJoin(gp_walk_info& gwi, std::stack<execplan::ParseTree*>& outerJoinStack)