mysql-5.7.20/sql/rpl_group_replication.cc | 10 +++++++--- mysql-5.7.20/sql/rpl_group_replication.h | 1 + .../storage/perfschema/table_replication_connection_status.cc | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mysql-5.7.20/sql/rpl_group_replication.cc b/mysql-5.7.20/sql/rpl_group_replication.cc index c687e1ef..8211ba88 100644 --- a/mysql-5.7.20/sql/rpl_group_replication.cc +++ b/mysql-5.7.20/sql/rpl_group_replication.cc @@ -256,16 +256,20 @@ int set_group_replication_retrieved_certification_info(View_change_log_event *vi } bool get_group_replication_connection_status_info( + bool locked, const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks) { - mysql_mutex_lock(&LOCK_group_replication_handler); + if (!locked) + mysql_mutex_lock(&LOCK_group_replication_handler); if (is_group_replication_plugin_loaded()) { int ret= group_replication_handler->get_connection_status_info(callbacks); - mysql_mutex_unlock(&LOCK_group_replication_handler); + if (!locked) + mysql_mutex_unlock(&LOCK_group_replication_handler); return ret; } - mysql_mutex_unlock(&LOCK_group_replication_handler); + if (!locked) + mysql_mutex_unlock(&LOCK_group_replication_handler); return true; } diff --git a/mysql-5.7.20/sql/rpl_group_replication.h b/mysql-5.7.20/sql/rpl_group_replication.h index 83d536c4..d4c50cdb 100644 --- a/mysql-5.7.20/sql/rpl_group_replication.h +++ b/mysql-5.7.20/sql/rpl_group_replication.h @@ -67,6 +67,7 @@ bool is_group_replication_running(); int set_group_replication_retrieved_certification_info(View_change_log_event *view_change_event); bool get_group_replication_connection_status_info( + bool locked, const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks); bool get_group_replication_group_members_info( unsigned int index, diff --git a/mysql-5.7.20/storage/perfschema/table_replication_connection_status.cc b/mysql-5.7.20/storage/perfschema/table_replication_connection_status.cc index 72ac8c1f..5cdaa97b 100644 --- a/mysql-5.7.20/storage/perfschema/table_replication_connection_status.cc +++ b/mysql-5.7.20/storage/perfschema/table_replication_connection_status.cc @@ -269,7 +269,7 @@ void table_replication_connection_status::make_row(Master_info *mi) }; // Query plugin and let callbacks do their job. - if (get_group_replication_connection_status_info(callbacks)) + if (get_group_replication_connection_status_info(true, callbacks)) { DBUG_PRINT("info", ("Group Replication stats not available!")); }