summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicențiu Ciorbaru <vicentiu@mariadb.org>2017-08-02 12:11:06 +0300
committerVicențiu Ciorbaru <vicentiu@mariadb.org>2017-08-02 12:11:06 +0300
commit04ae1207edec4cac80d7206377ae22a8447aa08f (patch)
tree67e2b1ba84c58cae901face18de6d36682e88c3a
parent360a4a037271d65ab6471f7ab3f9b6a893d90a31 (diff)
downloadmariadb-git-04ae1207edec4cac80d7206377ae22a8447aa08f.tar.gz
5.6.36-82.1
-rw-r--r--storage/xtradb/buf/buf0flu.cc17
-rw-r--r--storage/xtradb/include/univ.i2
-rw-r--r--storage/xtradb/log/log0log.cc2
3 files changed, 18 insertions, 3 deletions
diff --git a/storage/xtradb/buf/buf0flu.cc b/storage/xtradb/buf/buf0flu.cc
index 36e24fb3a1b..d401439a98f 100644
--- a/storage/xtradb/buf/buf0flu.cc
+++ b/storage/xtradb/buf/buf0flu.cc
@@ -2789,7 +2789,10 @@ DECLARE_THREAD(buf_flush_page_cleaner_thread)(
when SRV_SHUTDOWN_CLEANUP is set other threads like the master
and the purge threads may be working as well. We start flushing
the buffer pool but can't be sure that no new pages are being
- dirtied until we enter SRV_SHUTDOWN_FLUSH_PHASE phase. */
+ dirtied until we enter SRV_SHUTDOWN_FLUSH_PHASE phase. Because
+ the LRU manager thread is also flushing at SRV_SHUTDOWN_CLEANUP
+ but not SRV_SHUTDOWN_FLUSH_PHASE, we only leave the
+ SRV_SHUTDOWN_CLEANUP loop when the LRU manager quits. */
do {
n_flushed = page_cleaner_do_flush_batch(PCT_IO(100), LSN_MAX);
@@ -2798,7 +2801,10 @@ DECLARE_THREAD(buf_flush_page_cleaner_thread)(
if (n_flushed == 0) {
os_thread_sleep(100000);
}
- } while (srv_shutdown_state == SRV_SHUTDOWN_CLEANUP);
+
+ os_rmb;
+ } while (srv_shutdown_state == SRV_SHUTDOWN_CLEANUP
+ || buf_lru_manager_is_active);
/* At this point all threads including the master and the purge
thread must have been suspended. */
@@ -2815,6 +2821,11 @@ DECLARE_THREAD(buf_flush_page_cleaner_thread)(
buf_flush_wait_batch_end(NULL, BUF_FLUSH_LIST);
buf_flush_wait_LRU_batch_end();
+#ifdef UNIV_DEBUG
+ os_rmb;
+ ut_ad(!buf_lru_manager_is_active);
+#endif
+
bool success;
do {
@@ -2877,6 +2888,7 @@ DECLARE_THREAD(buf_flush_lru_manager_thread)(
#endif /* UNIV_DEBUG_THREAD_CREATION */
buf_lru_manager_is_active = true;
+ os_wmb;
/* On server shutdown, the LRU manager thread runs through cleanup
phase to provide free pages for the master and purge threads. */
@@ -2895,6 +2907,7 @@ DECLARE_THREAD(buf_flush_lru_manager_thread)(
}
buf_lru_manager_is_active = false;
+ os_wmb;
/* We count the number of threads in os_thread_exit(). A created
thread should always use that to exit and not use return() to exit. */
diff --git a/storage/xtradb/include/univ.i b/storage/xtradb/include/univ.i
index b4ad030a565..beaef2a2272 100644
--- a/storage/xtradb/include/univ.i
+++ b/storage/xtradb/include/univ.i
@@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH
#ifndef PERCONA_INNODB_VERSION
-#define PERCONA_INNODB_VERSION 82.0
+#define PERCONA_INNODB_VERSION 82.1
#endif
/* Enable UNIV_LOG_ARCHIVE in XtraDB */
diff --git a/storage/xtradb/log/log0log.cc b/storage/xtradb/log/log0log.cc
index f73d5b458d1..7be7b2c3c5a 100644
--- a/storage/xtradb/log/log0log.cc
+++ b/storage/xtradb/log/log0log.cc
@@ -3499,6 +3499,7 @@ loop:
before proceeding further. */
srv_shutdown_state = SRV_SHUTDOWN_FLUSH_PHASE;
count = 0;
+ os_rmb;
while (buf_page_cleaner_is_active || buf_lru_manager_is_active) {
if (srv_print_verbose_log && count == 0) {
ib_logf(IB_LOG_LEVEL_INFO,
@@ -3510,6 +3511,7 @@ loop:
if (count > 600) {
count = 0;
}
+ os_rmb;
}
mutex_enter(&log_sys->mutex);