diff options
Diffstat (limited to 'storage/federatedx')
-rw-r--r-- | storage/federatedx/Makefile.am | 1 | ||||
-rw-r--r-- | storage/federatedx/ha_federatedx.cc | 22 |
2 files changed, 15 insertions, 8 deletions
diff --git a/storage/federatedx/Makefile.am b/storage/federatedx/Makefile.am index 6dbeff1207a..ad1328247ec 100644 --- a/storage/federatedx/Makefile.am +++ b/storage/federatedx/Makefile.am @@ -22,7 +22,6 @@ pkgplugin_LTLIBRARIES = @plugin_federated_shared_target@ ha_federatedx_la_LDFLAGS = -module -rpath $(pkgplugindir) ha_federatedx_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN ha_federatedx_la_CFLAGS = $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN -ha_federatedx_la_SOURCES = ha_federatedx.cc EXTRA_LIBRARIES = libfederatedx.a diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc index 4d4b25da058..308215fe839 100644 --- a/storage/federatedx/ha_federatedx.cc +++ b/storage/federatedx/ha_federatedx.cc @@ -390,8 +390,8 @@ int federatedx_db_init(void *p) DBUG_ENTER("federatedx_db_init"); handlerton *federatedx_hton= (handlerton *)p; federatedx_hton->state= SHOW_OPTION_YES; - /* This is no longer needed for plugin storage engines */ - federatedx_hton->db_type= DB_TYPE_DEFAULT; + /* Needed to work with old .frm files */ + federatedx_hton->db_type= DB_TYPE_FEDERATED_DB; federatedx_hton->savepoint_offset= sizeof(ulong); federatedx_hton->close_connection= ha_federatedx::disconnect; federatedx_hton->savepoint_set= ha_federatedx::savepoint_set; @@ -1785,14 +1785,22 @@ int ha_federatedx::close(void) if (stored_result) retval= free_result(); - /* Disconnect from mysql */ - if ((txn= get_txn(thd, true))) + /* Disconnect from mysql. thd may be null during refresh */ + txn= thd ? get_txn(thd, true) : new federatedx_txn(); + + if (txn) + { txn->release(&io); + + DBUG_ASSERT(io == NULL); - DBUG_ASSERT(io == NULL); + if ((error= free_share(txn, share))) + retval= error; + + if (!thd) + delete txn; - if ((error= free_share(txn, share))) - retval= error; + } DBUG_RETURN(retval); } |