diff options
-rw-r--r-- | mysys/mf_dirname.c | 4 | ||||
-rw-r--r-- | server-tools/instance-manager/instance_options.cc | 9 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 6 | ||||
-rw-r--r-- | sql/mysqld.cc | 9 | ||||
-rw-r--r-- | sql/rpl_injector.cc | 10 | ||||
-rw-r--r-- | sql/rpl_injector.h | 5 |
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. |