summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Malyavin <nikitamalyavin@gmail.com>2022-04-27 20:29:03 +0300
committerNikita Malyavin <nikitamalyavin@gmail.com>2022-04-27 20:29:03 +0300
commita915d318ddc2146854a17348d7c1ef07dea24152 (patch)
treeae0f3140321415c029754e3401b716c173e7c536
parent93ddc2b9f6dc30527e5684d3c0b505620c12329a (diff)
downloadmariadb-git-ib_fix_plugin_init.tar.gz
fix ha_innobase plugin initialization race with purge table openib_fix_plugin_init
Now that purge opens a table very early, at undo node parsing stage, it slips before plugin initialization ends. This causes ASAN global-buffer-overflow and segfault. The problem is that `resolve_sysvars` function that normalizes table options (used in parse_engine_table_options during table open) is called after purge starts (srv_start() call in innodb_init()). To solve this, additional resolve_sysvars call is addid before srv_start in innodb_init.
-rw-r--r--storage/innobase/handler/ha_innodb.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index e0b5b43ade5..ebb78f5d8ba 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -4195,6 +4195,8 @@ static int innodb_init_params()
DBUG_RETURN(0);
}
+bool resolve_sysvar_table_options(handlerton *hton);
+
/** Initialize the InnoDB storage engine plugin.
@param[in,out] p InnoDB handlerton
@return error code
@@ -4328,6 +4330,8 @@ static int innodb_init(void* p)
DBUG_RETURN(innodb_init_abort());
}
+ resolve_sysvar_table_options(innobase_hton);
+
err = srv_start(create_new_db);
if (err != DB_SUCCESS) {