diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2022-04-27 20:29:03 +0300 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2022-04-27 20:29:03 +0300 |
commit | a915d318ddc2146854a17348d7c1ef07dea24152 (patch) | |
tree | ae0f3140321415c029754e3401b716c173e7c536 | |
parent | 93ddc2b9f6dc30527e5684d3c0b505620c12329a (diff) | |
download | mariadb-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.cc | 4 |
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) { |