mysql5/mysql-5.7.27/sql/rpl_info.cc

94 lines
3.5 KiB
C++

/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
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
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include "rpl_info.h"
#include "m_string.h" // strmake
Rpl_info::Rpl_info(const char* type
#ifdef HAVE_PSI_INTERFACE
,PSI_mutex_key *param_key_info_run_lock,
PSI_mutex_key *param_key_info_data_lock,
PSI_mutex_key *param_key_info_sleep_lock,
PSI_mutex_key *param_key_info_thd_lock,
PSI_mutex_key *param_key_info_data_cond,
PSI_mutex_key *param_key_info_start_cond,
PSI_mutex_key *param_key_info_stop_cond,
PSI_mutex_key *param_key_info_sleep_cond
#endif
,uint param_id, const char *param_channel
)
:Slave_reporting_capability(type),
#ifdef HAVE_PSI_INTERFACE
key_info_run_lock(param_key_info_run_lock),
key_info_data_lock(param_key_info_data_lock),
key_info_sleep_lock(param_key_info_sleep_lock),
key_info_thd_lock(param_key_info_thd_lock),
key_info_data_cond(param_key_info_data_cond),
key_info_start_cond(param_key_info_start_cond),
key_info_stop_cond(param_key_info_stop_cond),
key_info_sleep_cond(param_key_info_sleep_cond),
#endif
info_thd(0), inited(0), abort_slave(0),
slave_running(0), slave_run_id(0),
handler(0), internal_id(param_id)
{
#ifdef HAVE_PSI_INTERFACE
mysql_mutex_init(*key_info_run_lock,
&run_lock, MY_MUTEX_INIT_FAST);
mysql_mutex_init(*key_info_data_lock,
&data_lock, MY_MUTEX_INIT_FAST);
mysql_mutex_init(*key_info_sleep_lock,
&sleep_lock, MY_MUTEX_INIT_FAST);
mysql_mutex_init(*key_info_thd_lock,
&info_thd_lock, MY_MUTEX_INIT_FAST);
mysql_cond_init(*key_info_data_cond, &data_cond);
mysql_cond_init(*key_info_start_cond, &start_cond);
mysql_cond_init(*key_info_stop_cond, &stop_cond);
mysql_cond_init(*key_info_sleep_cond, &sleep_cond);
#else
mysql_mutex_init(NULL, &run_lock, MY_MUTEX_INIT_FAST);
mysql_mutex_init(NULL, &data_lock, MY_MUTEX_INIT_FAST);
mysql_mutex_init(NULL, &sleep_lock, MY_MUTEX_INIT_FAST);
mysql_mutex_init(NULL, &info_thd_lock, MY_MUTEX_INIT_FAST);
mysql_cond_init(NULL, &data_cond);
mysql_cond_init(NULL, &start_cond);
mysql_cond_init(NULL, &stop_cond);
mysql_cond_init(NULL, &sleep_cond);
#endif
if (param_channel)
strmake(channel, param_channel, sizeof(channel) -1);
else
/*create a default empty channel*/
strmake(channel, "", sizeof(channel) -1);
is_stopping.atomic_set(0);
}
Rpl_info::~Rpl_info()
{
delete handler;
mysql_mutex_destroy(&run_lock);
mysql_mutex_destroy(&data_lock);
mysql_mutex_destroy(&sleep_lock);
mysql_mutex_destroy(&info_thd_lock);
mysql_cond_destroy(&data_cond);
mysql_cond_destroy(&start_cond);
mysql_cond_destroy(&stop_cond);
mysql_cond_destroy(&sleep_cond);
}