From 32f87321a5a82c1f625909186767982a49c6f993 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich <svoj@mariadb.org> Date: Tue, 23 Jul 2013 18:03:23 +0400 Subject: [PATCH] =?UTF-8?q?MDEV-4786=20-=20merge=2010.0-monty=20=E2=86=92?= =?UTF-8?q?=2010.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed test_sql_discovery compilation failure. storage/test_sql_discovery/mysql-test/archive/discover.rdiff: archive.discover result has changed during merge. Adjusted discover.rdiff accordingly. storage/test_sql_discovery/test_sql_discovery.cc: Adjusted test_sql_discovery according to: WL#4305 - storage-engine private data area per physical table. --- .../mysql-test/archive/discover.rdiff | 4 +- .../test_sql_discovery/test_sql_discovery.cc | 56 ++++++++++--------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/storage/test_sql_discovery/mysql-test/archive/discover.rdiff b/storage/test_sql_discovery/mysql-test/archive/discover.rdiff index 3148999079f..c8be9fde63e 100644 --- a/storage/test_sql_discovery/mysql-test/archive/discover.rdiff +++ b/storage/test_sql_discovery/mysql-test/archive/discover.rdiff @@ -28,8 +28,8 @@ drop table t0; show status like 'Handler_discover'; Variable_name Value --Handler_discover 7 -+Handler_discover 8 +-Handler_discover 6 ++Handler_discover 7 # # Bug#45377: ARCHIVE tables aren't discoverable after OPTIMIZE # diff --git a/storage/test_sql_discovery/test_sql_discovery.cc b/storage/test_sql_discovery/test_sql_discovery.cc index 33438035b8d..5c4294dc49b 100644 --- a/storage/test_sql_discovery/test_sql_discovery.cc +++ b/storage/test_sql_discovery/test_sql_discovery.cc @@ -40,18 +40,25 @@ static struct st_mysql_sys_var *sysvars[] = { NULL }; -typedef struct st_share { - const char *name; +class SHARE : public Handler_share { +public: THR_LOCK lock; - uint use_count; - struct st_share *next; -} SHARE; + SHARE() + { + thr_lock_init(&lock); + } + ~SHARE() + { + thr_lock_delete(&lock); + } +}; class ha_tsd: public handler { private: THR_LOCK_DATA lock; SHARE *share; + SHARE *get_share(); public: ha_tsd(handlerton *hton, TABLE_SHARE *table_arg) @@ -87,39 +94,34 @@ class ha_tsd: public handler int close(void); }; -static SHARE *find_or_create_share(const char *table_name, TABLE *table) +SHARE *ha_tsd::get_share() { - SHARE *share; - for (share = (SHARE*)table->s->ha_data; share; share = share->next) - if (my_strcasecmp(table_alias_charset, table_name, share->name) == 0) - return share; - - share = (SHARE*)alloc_root(&table->s->mem_root, sizeof(*share)); - bzero(share, sizeof(*share)); - share->name = strdup_root(&table->s->mem_root, table_name); - share->next = (SHARE*)table->s->ha_data; - table->s->ha_data = share; - return share; + SHARE *tmp_share; + lock_shared_ha_data(); + if (!(tmp_share= static_cast<SHARE*>(get_ha_share_ptr()))) + { + tmp_share= new SHARE; + if (!tmp_share) + goto err; + + set_ha_share_ptr(static_cast<Handler_share*>(tmp_share)); + } +err: + unlock_shared_ha_data(); + return tmp_share; } int ha_tsd::open(const char *name, int mode, uint test_if_locked) { - mysql_mutex_lock(&table->s->LOCK_ha_data); - share = find_or_create_share(name, table); - if (share->use_count++ == 0) - thr_lock_init(&share->lock); - mysql_mutex_unlock(&table->s->LOCK_ha_data); - thr_lock_data_init(&share->lock,&lock,NULL); + if (!(share= get_share())) + return HA_ERR_OUT_OF_MEM; + thr_lock_data_init(&share->lock,&lock,NULL); return 0; } int ha_tsd::close(void) { - mysql_mutex_lock(&table->s->LOCK_ha_data); - if (--share->use_count == 0) - thr_lock_delete(&share->lock); - mysql_mutex_unlock(&table->s->LOCK_ha_data); return 0; } -- 2.30.9