Commit 4966090d authored by knielsen@rt.int.sifira.dk's avatar knielsen@rt.int.sifira.dk

Merge mysql.com:/usr/local/mysql/mysql-5.1-vg-apr2

into  mysql.com:/usr/local/mysql/tmp-5.1
parents ebe57fc7 af9e69b5
...@@ -72,7 +72,9 @@ uint dirname_part(my_string to, const char *name) ...@@ -72,7 +72,9 @@ uint dirname_part(my_string to, const char *name)
SYNPOSIS SYNPOSIS
convert_dirname() convert_dirname()
to Store result here to Store result here. Must be at least of size
min(FN_REFLEN, strlen(from) + 1) to make room
for adding FN_LIBCHAR at the end.
from Original filename. May be == to from Original filename. May be == to
from_end Pointer at end of filename (normally end \0) from_end Pointer at end of filename (normally end \0)
......
...@@ -420,8 +420,13 @@ int Instance_options::complete_initialization(const char *default_path) ...@@ -420,8 +420,13 @@ int Instance_options::complete_initialization(const char *default_path)
const char *tmp; const char *tmp;
char *end; char *end;
if (!mysqld_path.str && !(mysqld_path.str= strdup_root(&alloc, default_path))) if (!mysqld_path.str)
{
// Need one extra byte, as convert_dirname() adds a slash at the end.
if (!(mysqld_path.str= alloc_root(&alloc, strlen(default_path) + 2)))
goto err; goto err;
strcpy(mysqld_path.str, default_path);
}
// it's safe to cast this to char* since this is a buffer we are allocating // it's safe to cast this to char* since this is a buffer we are allocating
end= convert_dirname((char*)mysqld_path.str, mysqld_path.str, NullS); end= convert_dirname((char*)mysqld_path.str, mysqld_path.str, NullS);
......
...@@ -317,7 +317,7 @@ byte *thd_ndb_share_get_key(THD_NDB_SHARE *thd_ndb_share, uint *length, ...@@ -317,7 +317,7 @@ byte *thd_ndb_share_get_key(THD_NDB_SHARE *thd_ndb_share, uint *length,
my_bool not_used __attribute__((unused))) my_bool not_used __attribute__((unused)))
{ {
*length= sizeof(thd_ndb_share->key); *length= sizeof(thd_ndb_share->key);
return (byte*) thd_ndb_share->key; return (byte*) &thd_ndb_share->key;
} }
Thd_ndb::Thd_ndb() Thd_ndb::Thd_ndb()
...@@ -371,9 +371,9 @@ Thd_ndb::get_open_table(THD *thd, const void *key) ...@@ -371,9 +371,9 @@ Thd_ndb::get_open_table(THD *thd, const void *key)
DBUG_ENTER("Thd_ndb::get_open_table"); DBUG_ENTER("Thd_ndb::get_open_table");
HASH_SEARCH_STATE state; HASH_SEARCH_STATE state;
THD_NDB_SHARE *thd_ndb_share= THD_NDB_SHARE *thd_ndb_share=
(THD_NDB_SHARE*)hash_first(&open_tables, (byte *)key, sizeof(key), &state); (THD_NDB_SHARE*)hash_first(&open_tables, (byte *)&key, sizeof(key), &state);
while (thd_ndb_share && thd_ndb_share->key != key) while (thd_ndb_share && thd_ndb_share->key != key)
thd_ndb_share= (THD_NDB_SHARE*)hash_next(&open_tables, (byte *)key, sizeof(key), &state); thd_ndb_share= (THD_NDB_SHARE*)hash_next(&open_tables, (byte *)&key, sizeof(key), &state);
if (thd_ndb_share == 0) if (thd_ndb_share == 0)
{ {
thd_ndb_share= (THD_NDB_SHARE *) alloc_root(&thd->transaction.mem_root, thd_ndb_share= (THD_NDB_SHARE *) alloc_root(&thd->transaction.mem_root,
......
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
#include "ha_myisam.h" #include "ha_myisam.h"
#ifdef HAVE_ROW_BASED_REPLICATION
#include "rpl_injector.h"
#endif
#ifdef WITH_INNOBASE_STORAGE_ENGINE #ifdef WITH_INNOBASE_STORAGE_ENGINE
#define OPT_INNODB_DEFAULT 1 #define OPT_INNODB_DEFAULT 1
#else #else
...@@ -1185,6 +1189,9 @@ void clean_up(bool print_message) ...@@ -1185,6 +1189,9 @@ void clean_up(bool print_message)
what they have that is dependent on the binlog what they have that is dependent on the binlog
*/ */
ha_binlog_end(current_thd); ha_binlog_end(current_thd);
#ifdef HAVE_ROW_BASED_REPLICATION
injector::free_instance();
#endif
mysql_bin_log.cleanup(); mysql_bin_log.cleanup();
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
...@@ -1263,13 +1270,13 @@ void clean_up(bool print_message) ...@@ -1263,13 +1270,13 @@ void clean_up(bool print_message)
MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR)); MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR));
DBUG_PRINT("quit", ("Error messages freed")); DBUG_PRINT("quit", ("Error messages freed"));
/* Tell main we are ready */ /* Tell main we are ready */
logger.cleanup_end();
(void) pthread_mutex_lock(&LOCK_thread_count); (void) pthread_mutex_lock(&LOCK_thread_count);
DBUG_PRINT("quit", ("got thread count lock")); DBUG_PRINT("quit", ("got thread count lock"));
ready_to_exit=1; ready_to_exit=1;
/* do the broadcast inside the lock to ensure that my_end() is not called */ /* do the broadcast inside the lock to ensure that my_end() is not called */
(void) pthread_cond_broadcast(&COND_thread_count); (void) pthread_cond_broadcast(&COND_thread_count);
(void) pthread_mutex_unlock(&LOCK_thread_count); (void) pthread_mutex_unlock(&LOCK_thread_count);
logger.cleanup_end();
/* /*
The following lines may never be executed as the main thread may have The following lines may never be executed as the main thread may have
......
...@@ -155,6 +155,16 @@ injector *injector::instance() ...@@ -155,6 +155,16 @@ injector *injector::instance()
return s_injector; return s_injector;
} }
void injector::free_instance()
{
injector *inj = s_injector;
if (inj != 0)
{
s_injector= 0;
delete inj;
}
}
injector::transaction injector::new_trans(THD *thd) injector::transaction injector::new_trans(THD *thd)
......
...@@ -59,6 +59,11 @@ public: ...@@ -59,6 +59,11 @@ public:
*/ */
static injector *instance(); static injector *instance();
/*
Delete the singleton instance (if allocated). Used during server shutdown.
*/
static void free_instance();
/* /*
A transaction where rows can be added. A transaction where rows can be added.
......
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