Commit 8349522b authored by karen.langford@oracle.com's avatar karen.langford@oracle.com Committed by Karen Langford

Fix bug #55039 Failing assertion: space_id > 0 in fil0fil.c.

parent aff388cd
...@@ -240,17 +240,29 @@ dict_build_table_def_step( ...@@ -240,17 +240,29 @@ dict_build_table_def_step(
ibool is_path; ibool is_path;
mtr_t mtr; mtr_t mtr;
ulint space = 0; ulint space = 0;
ibool file_per_table;
ut_ad(mutex_own(&(dict_sys->mutex))); ut_ad(mutex_own(&(dict_sys->mutex)));
table = node->table; table = node->table;
dict_hdr_get_new_id(&table->id, NULL, /* Cache the global variable "srv_file_per_table" to
srv_file_per_table ? &space : NULL); a local variable before using it. Please note
"srv_file_per_table" is not under dict_sys mutex
protection, and could be changed while executing
this function. So better to cache the current value
to a local variable, and all future reference to
"srv_file_per_table" should use this local variable. */
file_per_table = srv_file_per_table;
dict_hdr_get_new_id(&table->id, NULL, NULL);
thr_get_trx(thr)->table_id = table->id; thr_get_trx(thr)->table_id = table->id;
if (srv_file_per_table) { if (file_per_table) {
/* Get a new space id if srv_file_per_table is set */
dict_hdr_get_new_id(NULL, NULL, &space);
if (UNIV_UNLIKELY(space == ULINT_UNDEFINED)) { if (UNIV_UNLIKELY(space == ULINT_UNDEFINED)) {
return(DB_ERROR); return(DB_ERROR);
} }
......
...@@ -1339,7 +1339,11 @@ try_again: ...@@ -1339,7 +1339,11 @@ try_again:
/* When srv_file_per_table is on, file creation failure may not /* When srv_file_per_table is on, file creation failure may not
be critical to the whole instance. Do not crash the server in be critical to the whole instance. Do not crash the server in
case of unknown errors. */ case of unknown errors.
Please note "srv_file_per_table" is a global variable with
no explicit synchronization protection. It could be
changed during this execution path. It might not have the
same value as the one when building the table definition */
if (srv_file_per_table) { if (srv_file_per_table) {
retry = os_file_handle_error_no_exit(name, retry = os_file_handle_error_no_exit(name,
create_mode == OS_FILE_CREATE ? create_mode == OS_FILE_CREATE ?
...@@ -1426,7 +1430,11 @@ try_again: ...@@ -1426,7 +1430,11 @@ try_again:
/* When srv_file_per_table is on, file creation failure may not /* When srv_file_per_table is on, file creation failure may not
be critical to the whole instance. Do not crash the server in be critical to the whole instance. Do not crash the server in
case of unknown errors. */ case of unknown errors.
Please note "srv_file_per_table" is a global variable with
no explicit synchronization protection. It could be
changed during this execution path. It might not have the
same value as the one when building the table definition */
if (srv_file_per_table) { if (srv_file_per_table) {
retry = os_file_handle_error_no_exit(name, retry = os_file_handle_error_no_exit(name,
create_mode == OS_FILE_CREATE ? create_mode == OS_FILE_CREATE ?
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment