Commit 4cb4593b 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 37a5f2d4
...@@ -13,6 +13,7 @@ Slave_reporting_capability::report(loglevel level, int err_code, ...@@ -13,6 +13,7 @@ Slave_reporting_capability::report(loglevel level, int err_code,
va_list args; va_list args;
va_start(args, msg); va_start(args, msg);
pthread_mutex_lock(&err_lock);
switch (level) switch (level)
{ {
case ERROR_LEVEL: case ERROR_LEVEL:
...@@ -38,6 +39,7 @@ Slave_reporting_capability::report(loglevel level, int err_code, ...@@ -38,6 +39,7 @@ Slave_reporting_capability::report(loglevel level, int err_code,
my_vsnprintf(pbuff, pbuffsize, msg, args); my_vsnprintf(pbuff, pbuffsize, msg, args);
pthread_mutex_unlock(&err_lock);
va_end(args); va_end(args);
/* If the msg string ends with '.', do not add a ',' it would be ugly */ /* 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, ...@@ -46,3 +48,8 @@ Slave_reporting_capability::report(loglevel level, int err_code,
(pbuff[0] && *(strend(pbuff)-1) == '.') ? "" : ",", (pbuff[0] && *(strend(pbuff)-1) == '.') ? "" : ",",
err_code); err_code);
} }
Slave_reporting_capability::~Slave_reporting_capability()
{
pthread_mutex_destroy(&err_lock);
}
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
class Slave_reporting_capability class Slave_reporting_capability
{ {
public: public:
/** lock used to synchronize m_last_error on 'SHOW SLAVE STATUS' **/
mutable pthread_mutex_t err_lock;
/** /**
Constructor. Constructor.
...@@ -24,6 +26,7 @@ public: ...@@ -24,6 +26,7 @@ public:
Slave_reporting_capability(char const *thread_name) Slave_reporting_capability(char const *thread_name)
: m_thread_name(thread_name) : m_thread_name(thread_name)
{ {
pthread_mutex_init(&err_lock, MY_MUTEX_INIT_FAST);
} }
/** /**
...@@ -44,7 +47,9 @@ public: ...@@ -44,7 +47,9 @@ public:
STATUS</code>. STATUS</code>.
*/ */
void clear_error() { void clear_error() {
pthread_mutex_lock(&err_lock);
m_last_error.clear(); m_last_error.clear();
pthread_mutex_unlock(&err_lock);
} }
/** /**
...@@ -72,6 +77,7 @@ public: ...@@ -72,6 +77,7 @@ public:
Error const& last_error() const { return m_last_error; } Error const& last_error() const { return m_last_error; }
virtual ~Slave_reporting_capability()= 0;
private: private:
/** /**
Last error produced by the I/O or SQL thread respectively. Last error produced by the I/O or SQL thread respectively.
...@@ -79,6 +85,10 @@ private: ...@@ -79,6 +85,10 @@ private:
mutable Error m_last_error; mutable Error m_last_error;
char const *const m_thread_name; 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 #endif // RPL_REPORTING_H
......
...@@ -1493,6 +1493,8 @@ bool show_master_info(THD* thd, Master_info* mi) ...@@ -1493,6 +1493,8 @@ bool show_master_info(THD* thd, Master_info* mi)
pthread_mutex_lock(&mi->data_lock); pthread_mutex_lock(&mi->data_lock);
pthread_mutex_lock(&mi->rli.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->host, &my_charset_bin);
protocol->store(mi->user, &my_charset_bin); protocol->store(mi->user, &my_charset_bin);
protocol->store((uint32) mi->port); protocol->store((uint32) mi->port);
...@@ -1592,6 +1594,8 @@ bool show_master_info(THD* thd, Master_info* mi) ...@@ -1592,6 +1594,8 @@ bool show_master_info(THD* thd, Master_info* mi)
// Last_SQL_Error // Last_SQL_Error
protocol->store(mi->rli.last_error().message, &my_charset_bin); 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->rli.data_lock);
pthread_mutex_unlock(&mi->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