summaryrefslogtreecommitdiff
path: root/storage/federatedx
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2011-07-13 21:10:18 +0200
committerSergei Golubchik <sergii@pisem.net>2011-07-13 21:10:18 +0200
commita8446356373e84530a4c83759370178ec2bce571 (patch)
tree51b83e92f9aa489a3308a6ea66546e06ae025689 /storage/federatedx
parentaac3a1eac9f6aa347311e7cce7547e269bed5ea0 (diff)
downloadmariadb-git-a8446356373e84530a4c83759370178ec2bce571.tar.gz
use PSI wrappers in aria and other non-MySQL code
Diffstat (limited to 'storage/federatedx')
-rw-r--r--storage/federatedx/federatedx_io.cc2
-rw-r--r--storage/federatedx/federatedx_txn.cc8
-rw-r--r--storage/federatedx/ha_federatedx.cc68
-rw-r--r--storage/federatedx/ha_federatedx.h2
4 files changed, 54 insertions, 26 deletions
diff --git a/storage/federatedx/federatedx_io.cc b/storage/federatedx/federatedx_io.cc
index 3e79c3f6d76..34d3dde3ebb 100644
--- a/storage/federatedx/federatedx_io.cc
+++ b/storage/federatedx/federatedx_io.cc
@@ -63,7 +63,7 @@ federatedx_io::federatedx_io(FEDERATEDX_SERVER *aserver)
DBUG_ENTER("federatedx_io::federatedx_io");
DBUG_ASSERT(server);
- safe_mutex_assert_owner(&server->mutex);
+ mysql_mutex_assert_owner(&server->mutex);
server->io_count++;
DBUG_VOID_RETURN;
diff --git a/storage/federatedx/federatedx_txn.cc b/storage/federatedx/federatedx_txn.cc
index 84c7cd50e8d..5049b1ff79f 100644
--- a/storage/federatedx/federatedx_txn.cc
+++ b/storage/federatedx/federatedx_txn.cc
@@ -111,7 +111,7 @@ int federatedx_txn::acquire(FEDERATEDX_SHARE *share, bool readonly,
if (!io)
{
/* check to see if there are any unowned IO connections */
- pthread_mutex_lock(&server->mutex);
+ mysql_mutex_lock(&server->mutex);
if ((io= server->idle_list))
{
server->idle_list= io->idle_next;
@@ -123,7 +123,7 @@ int federatedx_txn::acquire(FEDERATEDX_SHARE *share, bool readonly,
io->txn_next= txn_list;
txn_list= io;
- pthread_mutex_unlock(&server->mutex);
+ mysql_mutex_unlock(&server->mutex);
}
if (io->busy)
@@ -188,10 +188,10 @@ void federatedx_txn::release_scan()
/* reset some values */
io->readonly= TRUE;
- pthread_mutex_lock(&server->mutex);
+ mysql_mutex_lock(&server->mutex);
io->idle_next= server->idle_list;
server->idle_list= io;
- pthread_mutex_unlock(&server->mutex);
+ mysql_mutex_unlock(&server->mutex);
returned++;
}
}
diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc
index f0e2289fb4c..f79756c16ce 100644
--- a/storage/federatedx/ha_federatedx.cc
+++ b/storage/federatedx/ha_federatedx.cc
@@ -327,7 +327,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/* Variables for federatedx share methods */
static HASH federatedx_open_tables; // To track open tables
static HASH federatedx_open_servers; // To track open servers
-pthread_mutex_t federatedx_mutex; // To init the hash
+mysql_mutex_t federatedx_mutex; // To init the hash
const char ident_quote_char= '`'; // Character for quoting
// identifiers
const char value_quote_char= '\''; // Character for quoting
@@ -374,6 +374,30 @@ federatedx_server_get_key(FEDERATEDX_SERVER *server, size_t *length,
return server->key;
}
+#ifdef HAVE_PSI_INTERFACE
+static PSI_mutex_key fe_key_mutex_federatedx, fe_key_mutex_FEDERATEDX_SERVER_mutex;
+
+static PSI_mutex_info all_federated_mutexes[]=
+{
+ { &fe_key_mutex_federatedx, "federatedx", PSI_FLAG_GLOBAL},
+ { &fe_key_mutex_FEDERATEDX_SERVER_mutex, "FEDERATED_SERVER::mutex", 0}
+};
+
+static void init_federated_psi_keys(void)
+{
+ const char* category= "federated";
+ int count;
+
+ if (PSI_server == NULL)
+ return;
+
+ count= array_elements(all_federated_mutexes);
+ PSI_server->register_mutex(category, all_federated_mutexes, count);
+}
+#else
+#define init_federated_psi_keys() /* no-op */
+#endif /* HAVE_PSI_INTERFACE */
+
/*
Initialize the federatedx handler.
@@ -390,6 +414,7 @@ federatedx_server_get_key(FEDERATEDX_SERVER *server, size_t *length,
int federatedx_db_init(void *p)
{
DBUG_ENTER("federatedx_db_init");
+ init_federated_psi_keys();
handlerton *federatedx_hton= (handlerton *)p;
federatedx_hton->state= SHOW_OPTION_YES;
/* Needed to work with old .frm files */
@@ -404,7 +429,8 @@ int federatedx_db_init(void *p)
federatedx_hton->create= federatedx_create_handler;
federatedx_hton->flags= HTON_ALTER_NOT_SUPPORTED | HTON_NO_PARTITION;
- if (pthread_mutex_init(&federatedx_mutex, MY_MUTEX_INIT_FAST))
+ if (mysql_mutex_init(fe_key_mutex_federatedx,
+ &federatedx_mutex, MY_MUTEX_INIT_FAST))
goto error;
if (!my_hash_init(&federatedx_open_tables, &my_charset_bin, 32, 0, 0,
(my_hash_get_key) federatedx_share_get_key, 0, 0) &&
@@ -414,7 +440,7 @@ int federatedx_db_init(void *p)
DBUG_RETURN(FALSE);
}
- pthread_mutex_destroy(&federatedx_mutex);
+ mysql_mutex_destroy(&federatedx_mutex);
error:
DBUG_RETURN(TRUE);
}
@@ -434,7 +460,7 @@ int federatedx_done(void *p)
{
my_hash_free(&federatedx_open_tables);
my_hash_free(&federatedx_open_servers);
- pthread_mutex_destroy(&federatedx_mutex);
+ mysql_mutex_destroy(&federatedx_mutex);
return 0;
}
@@ -1489,7 +1515,7 @@ static FEDERATEDX_SERVER *get_server(FEDERATEDX_SHARE *share, TABLE *table)
String password(share->password ? share->password : "", &my_charset_bin);
DBUG_ENTER("ha_federated.cc::get_server");
- safe_mutex_assert_owner(&federatedx_mutex);
+ mysql_mutex_assert_owner(&federatedx_mutex);
init_alloc_root(&mem_root, 4096, 4096);
@@ -1512,7 +1538,8 @@ static FEDERATEDX_SERVER *get_server(FEDERATEDX_SHARE *share, TABLE *table)
if (my_hash_insert(&federatedx_open_servers, (uchar*) server))
goto error;
- pthread_mutex_init(&server->mutex, MY_MUTEX_INIT_FAST);
+ mysql_mutex_init(fe_key_mutex_FEDERATEDX_SERVER_mutex,
+ &server->mutex, MY_MUTEX_INIT_FAST);
}
else
free_root(&mem_root, MYF(0)); /* prevents memory leak */
@@ -1550,7 +1577,7 @@ static FEDERATEDX_SHARE *get_share(const char *table_name, TABLE *table)
bzero(&tmp_share, sizeof(tmp_share));
init_alloc_root(&mem_root, 256, 0);
- pthread_mutex_lock(&federatedx_mutex);
+ mysql_mutex_lock(&federatedx_mutex);
tmp_share.share_key= table_name;
tmp_share.share_key_length= strlen(table_name);
@@ -1599,12 +1626,12 @@ static FEDERATEDX_SHARE *get_share(const char *table_name, TABLE *table)
free_root(&mem_root, MYF(0)); /* prevents memory leak */
share->use_count++;
- pthread_mutex_unlock(&federatedx_mutex);
+ mysql_mutex_unlock(&federatedx_mutex);
DBUG_RETURN(share);
error:
- pthread_mutex_unlock(&federatedx_mutex);
+ mysql_mutex_unlock(&federatedx_mutex);
free_root(&mem_root, MYF(0));
DBUG_RETURN(NULL);
}
@@ -1615,10 +1642,10 @@ static int free_server(federatedx_txn *txn, FEDERATEDX_SERVER *server)
bool destroy;
DBUG_ENTER("free_server");
- pthread_mutex_lock(&federatedx_mutex);
+ mysql_mutex_lock(&federatedx_mutex);
if ((destroy= !--server->use_count))
my_hash_delete(&federatedx_open_servers, (uchar*) server);
- pthread_mutex_unlock(&federatedx_mutex);
+ mysql_mutex_unlock(&federatedx_mutex);
if (destroy)
{
@@ -1634,7 +1661,7 @@ static int free_server(federatedx_txn *txn, FEDERATEDX_SERVER *server)
DBUG_ASSERT(server->io_count == 0);
- pthread_mutex_destroy(&server->mutex);
+ mysql_mutex_destroy(&server->mutex);
mem_root= server->mem_root;
free_root(&mem_root, MYF(0));
}
@@ -1654,10 +1681,10 @@ static int free_share(federatedx_txn *txn, FEDERATEDX_SHARE *share)
bool destroy;
DBUG_ENTER("free_share");
- pthread_mutex_lock(&federatedx_mutex);
+ mysql_mutex_lock(&federatedx_mutex);
if ((destroy= !--share->use_count))
my_hash_delete(&federatedx_open_tables, (uchar*) share);
- pthread_mutex_unlock(&federatedx_mutex);
+ mysql_mutex_unlock(&federatedx_mutex);
if (destroy)
{
@@ -3350,9 +3377,9 @@ int ha_federatedx::create(const char *name, TABLE *table_arg,
the remote server. To ensure that no new FEDERATEDX_SERVER
instance is created, we pass NULL in get_server() TABLE arg.
*/
- pthread_mutex_lock(&federatedx_mutex);
+ mysql_mutex_lock(&federatedx_mutex);
tmp_share.s= get_server(&tmp_share, NULL);
- pthread_mutex_unlock(&federatedx_mutex);
+ mysql_mutex_unlock(&federatedx_mutex);
if (tmp_share.s)
{
@@ -3379,8 +3406,9 @@ int ha_federatedx::create(const char *name, TABLE *table_arg,
fill_server(thd->mem_root, &server, &tmp_share, create_info->table_charset);
#ifndef DBUG_OFF
- pthread_mutex_init(&server.mutex, MY_MUTEX_INIT_FAST);
- pthread_mutex_lock(&server.mutex);
+ mysql_mutex_init(fe_key_mutex_FEDERATEDX_SERVER_mutex,
+ &server.mutex, MY_MUTEX_INIT_FAST);
+ mysql_mutex_lock(&server.mutex);
#endif
tmp_io= federatedx_io::construct(thd->mem_root, &server);
@@ -3388,8 +3416,8 @@ int ha_federatedx::create(const char *name, TABLE *table_arg,
retval= test_connection(thd, tmp_io, &tmp_share);
#ifndef DBUG_OFF
- pthread_mutex_unlock(&server.mutex);
- pthread_mutex_destroy(&server.mutex);
+ mysql_mutex_unlock(&server.mutex);
+ mysql_mutex_destroy(&server.mutex);
#endif
delete tmp_io;
diff --git a/storage/federatedx/ha_federatedx.h b/storage/federatedx/ha_federatedx.h
index 93034ac0ad3..dc7733806ad 100644
--- a/storage/federatedx/ha_federatedx.h
+++ b/storage/federatedx/ha_federatedx.h
@@ -66,7 +66,7 @@ typedef struct st_fedrated_server {
const char *csname;
- pthread_mutex_t mutex;
+ mysql_mutex_t mutex;
federatedx_io *idle_list;
} FEDERATEDX_SERVER;