summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2020-10-02 10:00:59 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2020-10-02 10:00:59 +0530
commit445f820b610c614074ea15576f36067cb3371036 (patch)
treedfc88f2d99363b3c994509bd52024663ce4a9199
parentd6b33ea237c620923a7d4458a5907be0738c821d (diff)
downloadmariadb-git-bb-10.2-MDEV-21329.tar.gz
MDEV-21329 InnoDB: Failing assertion: lock->lock_word.load(std::memory_order_relaxed) == X_LOCK_DECR upon server shutdownbb-10.2-MDEV-21329
Problem is that dropping of fts table and sync of fts table happens concurrently during fts optimize thread shutdown. fts_optimize_remove_table() doesn't remove the table from the queue and it leads to above scenario. While removing the table from fts_optimize_wq, if the table can't be removed then wait till fts_optimize_thread shuts down.
-rw-r--r--storage/innobase/fts/fts0opt.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc
index 8ad1cf4ebe1..3cabb64b851 100644
--- a/storage/innobase/fts/fts0opt.cc
+++ b/storage/innobase/fts/fts0opt.cc
@@ -2573,6 +2573,11 @@ fts_optimize_remove_table(
if (fts_opt_start_shutdown) {
ib::info() << "Try to remove table " << table->name
<< " after FTS optimize thread exiting.";
+ /* If the table can't be removed then wait till
+ fts optimize thread shuts down */
+ while (fts_optimize_wq) {
+ os_thread_sleep(10000);
+ }
return;
}