summaryrefslogtreecommitdiff
path: root/sql/sp_head.cc
diff options
context:
space:
mode:
authorpem@mysql.comhem.se <>2003-12-15 13:24:16 +0100
committerpem@mysql.comhem.se <>2003-12-15 13:24:16 +0100
commit45e5896363761e4f61ec51fcf933ba2ac78fa7e9 (patch)
treeee3864cf944f460799a4850e7c1fdad0461a4592 /sql/sp_head.cc
parent07541b6abf0aab821019fd3f4c07d30598a7d96a (diff)
downloadmariadb-git-45e5896363761e4f61ec51fcf933ba2ac78fa7e9.tar.gz
Fixed various memory leaks.
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r--sql/sp_head.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 66c811c1e19..e40d56d4ef9 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -146,6 +146,7 @@ sp_head::operator delete(void *ptr, size_t size)
MEM_ROOT own_root;
sp_head *sp= (sp_head *)ptr;
+ DBUG_PRINT("info", ("root: %lx", &sp->m_mem_root));
memcpy(&own_root, (const void *)&sp->m_mem_root, sizeof(MEM_ROOT));
free_root(&own_root, MYF(0));
@@ -178,15 +179,17 @@ sp_head::init(LEX *lex)
}
void
-sp_head::init_strings(LEX_STRING *name, LEX *lex)
+sp_head::init_strings(THD *thd, LEX *lex, LEX_STRING *name)
{
DBUG_ENTER("sp_head::init_strings");
+ /* During parsing, we must use thd->mem_root */
+ MEM_ROOT *root= &thd->mem_root;
DBUG_PRINT("info", ("name: %*s", name->length, name->str));
m_name.length= name->length;
- m_name.str= strmake_root(&m_mem_root, name->str, name->length);
+ m_name.str= strmake_root(root, name->str, name->length);
m_params.length= m_param_end- m_param_begin;
- m_params.str= strmake_root(&m_mem_root,
+ m_params.str= strmake_root(root,
(char *)m_param_begin, m_params.length);
if (m_returns_begin && m_returns_end)
{
@@ -204,13 +207,13 @@ sp_head::init_strings(LEX_STRING *name, LEX *lex)
p-= 1;
m_returns_end= (uchar *)p+1;
m_retstr.length= m_returns_end - m_returns_begin;
- m_retstr.str= strmake_root(&m_mem_root,
+ m_retstr.str= strmake_root(root,
(char *)m_returns_begin, m_retstr.length);
}
m_body.length= lex->end_of_query - m_body_begin;
- m_body.str= strmake_root(&m_mem_root, (char *)m_body_begin, m_body.length);
+ m_body.str= strmake_root(root, (char *)m_body_begin, m_body.length);
m_defstr.length= lex->end_of_query - lex->buf;
- m_defstr.str= strmake_root(&m_mem_root, (char *)lex->buf, m_defstr.length);
+ m_defstr.str= strmake_root(root, (char *)lex->buf, m_defstr.length);
DBUG_VOID_RETURN;
}