summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysys/mf_dirname.c4
-rw-r--r--server-tools/instance-manager/instance_options.cc9
-rw-r--r--sql/ha_ndbcluster.cc6
-rw-r--r--sql/mysqld.cc9
-rw-r--r--sql/rpl_injector.cc10
-rw-r--r--sql/rpl_injector.h5
6 files changed, 36 insertions, 7 deletions
diff --git a/mysys/mf_dirname.c b/mysys/mf_dirname.c
index 378fe7080b8..43fde95554a 100644
--- a/mysys/mf_dirname.c
+++ b/mysys/mf_dirname.c
@@ -72,7 +72,9 @@ uint dirname_part(my_string to, const char *name)
SYNPOSIS
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_end Pointer at end of filename (normally end \0)
diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc
index 7b3f435eae5..576096adfd2 100644
--- a/server-tools/instance-manager/instance_options.cc
+++ b/server-tools/instance-manager/instance_options.cc
@@ -420,8 +420,13 @@ int Instance_options::complete_initialization(const char *default_path)
const char *tmp;
char *end;
- if (!mysqld_path.str && !(mysqld_path.str= strdup_root(&alloc, default_path)))
- goto err;
+ 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;
+ strcpy(mysqld_path.str, default_path);
+ }
// 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);
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 0004234edd3..997072bd2a5 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -317,7 +317,7 @@ byte *thd_ndb_share_get_key(THD_NDB_SHARE *thd_ndb_share, uint *length,
my_bool not_used __attribute__((unused)))
{
*length= sizeof(thd_ndb_share->key);
- return (byte*) thd_ndb_share->key;
+ return (byte*) &thd_ndb_share->key;
}
Thd_ndb::Thd_ndb()
@@ -371,9 +371,9 @@ Thd_ndb::get_open_table(THD *thd, const void *key)
DBUG_ENTER("Thd_ndb::get_open_table");
HASH_SEARCH_STATE state;
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)
- 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)
{
thd_ndb_share= (THD_NDB_SHARE *) alloc_root(&thd->transaction.mem_root,
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 73ccecf45df..95411db4119 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -28,6 +28,10 @@
#include "ha_myisam.h"
+#ifdef HAVE_ROW_BASED_REPLICATION
+#include "rpl_injector.h"
+#endif
+
#ifdef WITH_INNOBASE_STORAGE_ENGINE
#define OPT_INNODB_DEFAULT 1
#else
@@ -1185,6 +1189,9 @@ void clean_up(bool print_message)
what they have that is dependent on the binlog
*/
ha_binlog_end(current_thd);
+#ifdef HAVE_ROW_BASED_REPLICATION
+ injector::free_instance();
+#endif
mysql_bin_log.cleanup();
#ifdef HAVE_REPLICATION
@@ -1263,13 +1270,13 @@ void clean_up(bool print_message)
MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR));
DBUG_PRINT("quit", ("Error messages freed"));
/* Tell main we are ready */
+ logger.cleanup_end();
(void) pthread_mutex_lock(&LOCK_thread_count);
DBUG_PRINT("quit", ("got thread count lock"));
ready_to_exit=1;
/* do the broadcast inside the lock to ensure that my_end() is not called */
(void) pthread_cond_broadcast(&COND_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
diff --git a/sql/rpl_injector.cc b/sql/rpl_injector.cc
index ec0add4165f..5a74fd58755 100644
--- a/sql/rpl_injector.cc
+++ b/sql/rpl_injector.cc
@@ -155,6 +155,16 @@ injector *injector::instance()
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)
diff --git a/sql/rpl_injector.h b/sql/rpl_injector.h
index 3b0857e0833..48df30e8ac8 100644
--- a/sql/rpl_injector.h
+++ b/sql/rpl_injector.h
@@ -59,6 +59,11 @@ public:
*/
static injector *instance();
+ /*
+ Delete the singleton instance (if allocated). Used during server shutdown.
+ */
+ static void free_instance();
+
/*
A transaction where rows can be added.