diff options
author | pem@mysql.comhem.se <> | 2003-12-15 13:24:16 +0100 |
---|---|---|
committer | pem@mysql.comhem.se <> | 2003-12-15 13:24:16 +0100 |
commit | 45e5896363761e4f61ec51fcf933ba2ac78fa7e9 (patch) | |
tree | ee3864cf944f460799a4850e7c1fdad0461a4592 /sql/sp_head.cc | |
parent | 07541b6abf0aab821019fd3f4c07d30598a7d96a (diff) | |
download | mariadb-git-45e5896363761e4f61ec51fcf933ba2ac78fa7e9.tar.gz |
Fixed various memory leaks.
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r-- | sql/sp_head.cc | 15 |
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; } |