summaryrefslogtreecommitdiff
path: root/plugin/semisync
diff options
context:
space:
mode:
authorAlexander Nozdrin <alik@sun.com>2009-12-19 11:35:19 +0300
committerAlexander Nozdrin <alik@sun.com>2009-12-19 11:35:19 +0300
commita5cdaab3eb5ef11d633192ba4a43cfd8b7e6e381 (patch)
treefc4705fd7997afc82026eba8f741fce4c9aaa13d /plugin/semisync
parent8cffae12a6ab9104c533a8fcf90df66f7b14b4f0 (diff)
parent02b76970c5da2b836d322e4189cdde79a5c15f4c (diff)
downloadmariadb-git-a5cdaab3eb5ef11d633192ba4a43cfd8b7e6e381.tar.gz
Auto-merge from mysql-next-mr.
Diffstat (limited to 'plugin/semisync')
-rw-r--r--plugin/semisync/semisync_master.cc24
-rw-r--r--plugin/semisync/semisync_master.h14
-rw-r--r--plugin/semisync/semisync_master_plugin.cc36
3 files changed, 58 insertions, 16 deletions
diff --git a/plugin/semisync/semisync_master.cc b/plugin/semisync/semisync_master.cc
index c2e329e1fe4..eb8d7465025 100644
--- a/plugin/semisync/semisync_master.cc
+++ b/plugin/semisync/semisync_master.cc
@@ -1,5 +1,5 @@
/* Copyright (C) 2007 Google Inc.
- Copyright (C) 2008 MySQL AB
+ Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -63,7 +63,7 @@ static int gettimeofday(struct timeval *tv, void *tz)
*
******************************************************************************/
-ActiveTranx::ActiveTranx(pthread_mutex_t *lock,
+ActiveTranx::ActiveTranx(mysql_mutex_t *lock,
unsigned long trace_level)
: Trace(trace_level),
num_entries_(max_connections << 1), /* Transaction hash table size
@@ -377,8 +377,10 @@ int ReplSemiSyncMaster::initObject()
setTraceLevel(rpl_semi_sync_master_trace_level);
/* Mutex initialization can only be done after MY_INIT(). */
- pthread_mutex_init(&LOCK_binlog_, MY_MUTEX_INIT_FAST);
- pthread_cond_init(&COND_binlog_send_, NULL);
+ mysql_mutex_init(key_ss_mutex_LOCK_binlog_,
+ &LOCK_binlog_, MY_MUTEX_INIT_FAST);
+ mysql_cond_init(key_ss_cond_COND_binlog_send_,
+ &COND_binlog_send_, NULL);
if (rpl_semi_sync_master_enabled)
result = enableMaster();
@@ -453,8 +455,8 @@ ReplSemiSyncMaster::~ReplSemiSyncMaster()
{
if (init_done_)
{
- pthread_mutex_destroy(&LOCK_binlog_);
- pthread_cond_destroy(&COND_binlog_send_);
+ mysql_mutex_destroy(&LOCK_binlog_);
+ mysql_cond_destroy(&COND_binlog_send_);
}
delete active_tranxs_;
@@ -462,17 +464,17 @@ ReplSemiSyncMaster::~ReplSemiSyncMaster()
void ReplSemiSyncMaster::lock()
{
- pthread_mutex_lock(&LOCK_binlog_);
+ mysql_mutex_lock(&LOCK_binlog_);
}
void ReplSemiSyncMaster::unlock()
{
- pthread_mutex_unlock(&LOCK_binlog_);
+ mysql_mutex_unlock(&LOCK_binlog_);
}
void ReplSemiSyncMaster::cond_broadcast()
{
- pthread_cond_broadcast(&COND_binlog_send_);
+ mysql_cond_broadcast(&COND_binlog_send_);
}
int ReplSemiSyncMaster::cond_timewait(struct timespec *wait_time)
@@ -481,8 +483,8 @@ int ReplSemiSyncMaster::cond_timewait(struct timespec *wait_time)
int wait_res;
function_enter(kWho);
- wait_res = pthread_cond_timedwait(&COND_binlog_send_,
- &LOCK_binlog_, wait_time);
+ wait_res= mysql_cond_timedwait(&COND_binlog_send_,
+ &LOCK_binlog_, wait_time);
return function_exit(kWho, wait_res);
}
diff --git a/plugin/semisync/semisync_master.h b/plugin/semisync/semisync_master.h
index bfb1cb74cd0..1a951fa0ba2 100644
--- a/plugin/semisync/semisync_master.h
+++ b/plugin/semisync/semisync_master.h
@@ -1,5 +1,6 @@
/* Copyright (C) 2007 Google Inc.
Copyright (C) 2008 MySQL AB
+ Copyright (C) 2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,6 +21,11 @@
#include "semisync.h"
+#ifdef HAVE_PSI_INTERFACE
+extern PSI_mutex_key key_ss_mutex_LOCK_binlog_;
+extern PSI_cond_key key_ss_cond_COND_binlog_send_;
+#endif
+
/**
This class manages memory for active transaction list.
@@ -44,7 +50,7 @@ private:
TranxNode **trx_htb_; /* A hash table on active transactions. */
int num_entries_; /* maximum hash table entries */
- pthread_mutex_t *lock_; /* mutex lock */
+ mysql_mutex_t *lock_; /* mutex lock */
inline void assert_lock_owner();
@@ -69,7 +75,7 @@ private:
}
public:
- ActiveTranx(pthread_mutex_t *lock, unsigned long trace_level);
+ ActiveTranx(mysql_mutex_t *lock, unsigned long trace_level);
~ActiveTranx();
/* Insert an active transaction node with the specified position.
@@ -118,14 +124,14 @@ class ReplSemiSyncMaster
/* This cond variable is signaled when enough binlog has been sent to slave,
* so that a waiting trx can return the 'ok' to the client for a commit.
*/
- pthread_cond_t COND_binlog_send_;
+ mysql_cond_t COND_binlog_send_;
/* Mutex that protects the following state variables and the active
* transaction list.
* Under no cirumstances we can acquire mysql_bin_log.LOCK_log if we are
* already holding LOCK_binlog_ because it can cause deadlocks.
*/
- pthread_mutex_t LOCK_binlog_;
+ mysql_mutex_t LOCK_binlog_;
/* This is set to true when reply_file_name_ contains meaningful data. */
bool reply_file_name_inited_;
diff --git a/plugin/semisync/semisync_master_plugin.cc b/plugin/semisync/semisync_master_plugin.cc
index efcb7172b28..e371df3edc3 100644
--- a/plugin/semisync/semisync_master_plugin.cc
+++ b/plugin/semisync/semisync_master_plugin.cc
@@ -1,5 +1,5 @@
/* Copyright (C) 2007 Google Inc.
- Copyright (C) 2008 MySQL AB
+ Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -334,9 +334,43 @@ static SHOW_VAR semi_sync_master_status_vars[]= {
{NULL, NULL, SHOW_LONG},
};
+#ifdef HAVE_PSI_INTERFACE
+PSI_mutex_key key_ss_mutex_LOCK_binlog_;
+
+static PSI_mutex_info all_semisync_mutexes[]=
+{
+ { &key_ss_mutex_LOCK_binlog_, "LOCK_binlog_", 0}
+};
+
+PSI_cond_key key_ss_cond_COND_binlog_send_;
+
+static PSI_cond_info all_semisync_conds[]=
+{
+ { &key_ss_cond_COND_binlog_send_, "COND_binlog_send_", 0}
+};
+
+static void init_semisync_psi_keys(void)
+{
+ const char* category= "semisync";
+ int count;
+
+ if (PSI_server == NULL)
+ return;
+
+ count= array_elements(all_semisync_mutexes);
+ PSI_server->register_mutex(category, all_semisync_mutexes, count);
+
+ count= array_elements(all_semisync_conds);
+ PSI_server->register_cond(category, all_semisync_conds, count);
+}
+#endif /* HAVE_PSI_INTERFACE */
static int semi_sync_master_plugin_init(void *p)
{
+#ifdef HAVE_PSI_INTERFACE
+ init_semisync_psi_keys();
+#endif
+
if (repl_semisync.initObject())
return 1;
if (register_trans_observer(&trans_observer, p))