Commit 376a73c0 authored by Alfranio Correia's avatar Alfranio Correia

BUG#45511 rpl.rpl_binlog_corruption fails with warning messages in Valgrind

This is a backport of BUG#43076.
parent 81b5a391
......@@ -13,6 +13,7 @@ Slave_reporting_capability::report(loglevel level, int err_code,
va_list args;
va_start(args, msg);
pthread_mutex_lock(&err_lock);
switch (level)
{
case ERROR_LEVEL:
......@@ -38,6 +39,7 @@ Slave_reporting_capability::report(loglevel level, int err_code,
my_vsnprintf(pbuff, pbuffsize, msg, args);
pthread_mutex_unlock(&err_lock);
va_end(args);
/* If the msg string ends with '.', do not add a ',' it would be ugly */
......@@ -46,3 +48,8 @@ Slave_reporting_capability::report(loglevel level, int err_code,
(pbuff[0] && *(strend(pbuff)-1) == '.') ? "" : ",",
err_code);
}
Slave_reporting_capability::~Slave_reporting_capability()
{
pthread_mutex_destroy(&err_lock);
}
......@@ -16,6 +16,8 @@
class Slave_reporting_capability
{
public:
/** lock used to synchronize m_last_error on 'SHOW SLAVE STATUS' **/
mutable pthread_mutex_t err_lock;
/**
Constructor.
......@@ -24,6 +26,7 @@ public:
Slave_reporting_capability(char const *thread_name)
: m_thread_name(thread_name)
{
pthread_mutex_init(&err_lock, MY_MUTEX_INIT_FAST);
}
/**
......@@ -44,7 +47,9 @@ public:
STATUS</code>.
*/
void clear_error() {
pthread_mutex_lock(&err_lock);
m_last_error.clear();
pthread_mutex_unlock(&err_lock);
}
/**
......@@ -72,6 +77,7 @@ public:
Error const& last_error() const { return m_last_error; }
virtual ~Slave_reporting_capability()= 0;
private:
/**
Last error produced by the I/O or SQL thread respectively.
......@@ -79,6 +85,10 @@ private:
mutable Error m_last_error;
char const *const m_thread_name;
// not implemented
Slave_reporting_capability(const Slave_reporting_capability& rhs);
Slave_reporting_capability& operator=(const Slave_reporting_capability& rhs);
};
#endif // RPL_REPORTING_H
......
......@@ -1493,6 +1493,8 @@ bool show_master_info(THD* thd, Master_info* mi)
pthread_mutex_lock(&mi->data_lock);
pthread_mutex_lock(&mi->rli.data_lock);
pthread_mutex_lock(&mi->err_lock);
pthread_mutex_lock(&mi->rli.err_lock);
protocol->store(mi->host, &my_charset_bin);
protocol->store(mi->user, &my_charset_bin);
protocol->store((uint32) mi->port);
......@@ -1592,6 +1594,8 @@ bool show_master_info(THD* thd, Master_info* mi)
// Last_SQL_Error
protocol->store(mi->rli.last_error().message, &my_charset_bin);
pthread_mutex_unlock(&mi->rli.err_lock);
pthread_mutex_unlock(&mi->err_lock);
pthread_mutex_unlock(&mi->rli.data_lock);
pthread_mutex_unlock(&mi->data_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment