summaryrefslogtreecommitdiff
path: root/sql/sp_cache.cc
diff options
context:
space:
mode:
authorunknown <pem@mysql.comhem.se>2003-12-15 13:24:16 +0100
committerunknown <pem@mysql.comhem.se>2003-12-15 13:24:16 +0100
commit1d77c0412ee5875cefaf514df483af38c63356f5 (patch)
treeee3864cf944f460799a4850e7c1fdad0461a4592 /sql/sp_cache.cc
parenta6f85eeac15b520f34aed0782e10825b20a038cc (diff)
downloadmariadb-git-1d77c0412ee5875cefaf514df483af38c63356f5.tar.gz
Fixed various memory leaks.
sql/sp.cc: Fixed memory leaks. Deletion of sps now in sp_cache. sql/sp_cache.cc: Fixed memory leaks. Use implicit delete of objects to make sure they're always freed. sql/sp_cache.h: Fixed memory leaks. Use implicit delete of objects to make sure they're always freed. sql/sp_head.cc: Fixed memory leaks. Make sure we use the right mem_root during parsing. sql/sp_head.h: Fixed memory leaks. Make sure we use the right mem_root during parsing. sql/sql_parse.cc: Fixed memory leaks. Don't forget to free the temporary object created at definition. sql/sql_yacc.yy: Fixed memory leaks. Make sure we use the right mem_root during parsing.
Diffstat (limited to 'sql/sp_cache.cc')
-rw-r--r--sql/sp_cache.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/sql/sp_cache.cc b/sql/sp_cache.cc
index 7e9d5f92ef0..4fee49c2d81 100644
--- a/sql/sp_cache.cc
+++ b/sql/sp_cache.cc
@@ -92,11 +92,11 @@ sp_cache_lookup(sp_cache **cp, char *name, uint namelen)
return c->lookup(name, namelen);
}
-sp_head *
+bool
sp_cache_remove(sp_cache **cp, char *name, uint namelen)
{
sp_cache *c= *cp;
- sp_head *sp= NULL;
+ bool found= FALSE;
if (c)
{
@@ -109,10 +109,10 @@ sp_cache_remove(sp_cache **cp, char *name, uint namelen)
if (c->version < v)
c->remove_all();
else
- sp= c->remove(name, namelen);
+ found= c->remove(name, namelen);
c->version= v+1;
}
- return sp;
+ return found;
}
@@ -123,6 +123,14 @@ hash_get_key_for_sp_head(const byte *ptr, uint *plen,
return ((sp_head*)ptr)->name(plen);
}
+static void
+hash_free_sp_head(void *p)
+{
+ sp_head *sp= (sp_head *)p;
+
+ delete sp;
+}
+
sp_cache::sp_cache()
{
init();
@@ -137,7 +145,7 @@ void
sp_cache::init()
{
hash_init(&m_hashtable, system_charset_info, 0, 0, 0,
- hash_get_key_for_sp_head, 0, 0);
+ hash_get_key_for_sp_head, hash_free_sp_head, 0);
version= 0;
}