mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
new static archive_inited variable, so that archive_db_end() will do something only if archive_db_init() was run before
(protection against destroying uninited mutex in the case where mysqld fails early at startup (before archive_db_init() was called) and then calls archive_db_end() to clean up). sql/examples/ha_archive.cc: new static archive_inited variable, so that archive_db_end() will do something only if archive_db_init() was run before.
This commit is contained in:
@@ -114,6 +114,8 @@
|
|||||||
data - The data is stored in a "row +blobs" format.
|
data - The data is stored in a "row +blobs" format.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* If the archive storage engine has been inited */
|
||||||
|
static bool archive_inited= 0;
|
||||||
/* 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;
|
||||||
@@ -157,6 +159,7 @@ static byte* archive_get_key(ARCHIVE_SHARE *share,uint *length,
|
|||||||
|
|
||||||
bool archive_db_init()
|
bool archive_db_init()
|
||||||
{
|
{
|
||||||
|
archive_inited= 1;
|
||||||
VOID(pthread_mutex_init(&archive_mutex, MY_MUTEX_INIT_FAST));
|
VOID(pthread_mutex_init(&archive_mutex, MY_MUTEX_INIT_FAST));
|
||||||
return (hash_init(&archive_open_tables, system_charset_info, 32, 0, 0,
|
return (hash_init(&archive_open_tables, system_charset_info, 32, 0, 0,
|
||||||
(hash_get_key) archive_get_key, 0, 0));
|
(hash_get_key) archive_get_key, 0, 0));
|
||||||
@@ -176,8 +179,12 @@ bool archive_db_init()
|
|||||||
|
|
||||||
bool archive_db_end()
|
bool archive_db_end()
|
||||||
{
|
{
|
||||||
hash_free(&archive_open_tables);
|
if (archive_inited)
|
||||||
VOID(pthread_mutex_destroy(&archive_mutex));
|
{
|
||||||
|
hash_free(&archive_open_tables);
|
||||||
|
VOID(pthread_mutex_destroy(&archive_mutex));
|
||||||
|
}
|
||||||
|
archive_inited= 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user