Commit b6e00331 authored by unknown's avatar unknown

Test Bug: Memory leaks in the archive handler.

Moved initialization code into a new init function.
Added a new cleanup function.
Added a call to close the meta file.



mysql-test/t/archive.test:
  Test Bug: Memory leaks in the archive handler.
  Fixed a typo.
sql/examples/ha_archive.h:
  Test Bug: Memory leaks in the archive handler.
  Added declarations for the new init/cleanup functions.
sql/handler.cc:
  Test Bug: Memory leaks in the archive handler.
  Added calls of the new init/cleanup functions.
parent f712a3d8
# #
# Simple test for archive example # Simple test for archive example
# Taken fromm the select test # Taken from the select test
# #
-- source include/have_archive.inc -- source include/have_archive.inc
......
...@@ -116,7 +116,6 @@ ...@@ -116,7 +116,6 @@
/* Variables for archive share methods */ /* Variables for archive share methods */
pthread_mutex_t archive_mutex; pthread_mutex_t archive_mutex;
static HASH archive_open_tables; static HASH archive_open_tables;
static int archive_init= 0;
/* The file extension */ /* The file extension */
#define ARZ ".ARZ" // The data file #define ARZ ".ARZ" // The data file
...@@ -142,6 +141,46 @@ static byte* archive_get_key(ARCHIVE_SHARE *share,uint *length, ...@@ -142,6 +141,46 @@ static byte* archive_get_key(ARCHIVE_SHARE *share,uint *length,
return (byte*) share->table_name; return (byte*) share->table_name;
} }
/*
Initialize the archive handler.
SYNOPSIS
archive_db_init()
void
RETURN
FALSE OK
TRUE Error
*/
bool archive_db_init()
{
VOID(pthread_mutex_init(&archive_mutex, MY_MUTEX_INIT_FAST));
return (hash_init(&archive_open_tables, system_charset_info, 32, 0, 0,
(hash_get_key) archive_get_key, 0, 0));
}
/*
Release the archive handler.
SYNOPSIS
archive_db_end()
void
RETURN
FALSE OK
*/
bool archive_db_end()
{
hash_free(&archive_open_tables);
VOID(pthread_mutex_destroy(&archive_mutex));
return FALSE;
}
/* /*
This method reads the header of a datafile and returns whether or not it was successful. This method reads the header of a datafile and returns whether or not it was successful.
*/ */
...@@ -269,23 +308,6 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table) ...@@ -269,23 +308,6 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table)
uint length; uint length;
char *tmp_name; char *tmp_name;
if (!archive_init)
{
/* Hijack a mutex for init'ing the storage engine */
pthread_mutex_lock(&LOCK_mysql_create_db);
if (!archive_init)
{
VOID(pthread_mutex_init(&archive_mutex,MY_MUTEX_INIT_FAST));
if (hash_init(&archive_open_tables,system_charset_info,32,0,0,
(hash_get_key) archive_get_key,0,0))
{
pthread_mutex_unlock(&LOCK_mysql_create_db);
return NULL;
}
archive_init++;
}
pthread_mutex_unlock(&LOCK_mysql_create_db);
}
pthread_mutex_lock(&archive_mutex); pthread_mutex_lock(&archive_mutex);
length=(uint) strlen(table_name); length=(uint) strlen(table_name);
...@@ -379,6 +401,7 @@ int ha_archive::free_share(ARCHIVE_SHARE *share) ...@@ -379,6 +401,7 @@ int ha_archive::free_share(ARCHIVE_SHARE *share)
(void)write_meta_file(share->meta_file, share->rows_recorded, FALSE); (void)write_meta_file(share->meta_file, share->rows_recorded, FALSE);
if (gzclose(share->archive_write) == Z_ERRNO) if (gzclose(share->archive_write) == Z_ERRNO)
rc= 1; rc= 1;
my_close(share->meta_file,MYF(0));
my_free((gptr) share, MYF(0)); my_free((gptr) share, MYF(0));
} }
pthread_mutex_unlock(&archive_mutex); pthread_mutex_unlock(&archive_mutex);
......
...@@ -125,3 +125,7 @@ public: ...@@ -125,3 +125,7 @@ public:
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
enum thr_lock_type lock_type); enum thr_lock_type lock_type);
}; };
bool archive_db_init(void);
bool archive_db_end(void);
...@@ -277,6 +277,16 @@ int ha_init() ...@@ -277,6 +277,16 @@ int ha_init()
else else
opt_using_transactions=1; opt_using_transactions=1;
} }
#endif
#ifdef HAVE_ARCHIVE_DB
if (have_archive_db == SHOW_OPTION_YES)
{
if (archive_db_init())
{
have_archive_db= SHOW_OPTION_DISABLED;
error= 1;
}
}
#endif #endif
return error; return error;
} }
...@@ -308,6 +318,10 @@ int ha_panic(enum ha_panic_function flag) ...@@ -308,6 +318,10 @@ int ha_panic(enum ha_panic_function flag)
#ifdef HAVE_NDBCLUSTER_DB #ifdef HAVE_NDBCLUSTER_DB
if (have_ndbcluster == SHOW_OPTION_YES) if (have_ndbcluster == SHOW_OPTION_YES)
error|=ndbcluster_end(); error|=ndbcluster_end();
#endif
#ifdef HAVE_ARCHIVE_DB
if (have_archive_db == SHOW_OPTION_YES)
error|= archive_db_end();
#endif #endif
return error; return error;
} /* ha_panic */ } /* ha_panic */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment